POCO 的 Zip 类对中文文件名支持不正确的解决方法
2012-07-26 10:40
447 查看
POCO 在 Windows 中默认是定义了 POCO_WIN32_UTF8
所以从这段代码来看,对路径的操作是默认使用 UTF16 的。但是在 Zip 里面,文件名不是用 UTF16 来存放。
只要把 filename 转换成 UTF16 就可以了。
在 Poco::Path file(filename); 之前加上这段代码,整个文件路径就正确了:
#if defined (POCO_WIN32_UTF8) std::wstring utf16Path; UnicodeConverter::toUTF16(path, utf16Path); _handle = CreateFileW(utf16Path.c_str(), access, shareMode, NULL, creationDisp, flags, NULL); #else _handle = CreateFileA(path.c_str(), access, shareMode, NULL, creationDisp, flags, NULL); #endif
所以从这段代码来看,对路径的操作是默认使用 UTF16 的。但是在 Zip 里面,文件名不是用 UTF16 来存放。
Poco::Path file(filename); // filename 不是 utf16 编码 file.makeFile(); Poco::Path dest(_outDir, file); // _outDir 是 utf16 编码 dest.makeFile(); ... Poco::FileOutputStream out(dest.toString()); // 这时候整个文件路径是不正确的 ZipInputStream inp(zipStream, hdr, false); Poco::StreamCopier::copyStream(inp, out); out.close();
只要把 filename 转换成 UTF16 就可以了。
在 Poco::Path file(filename); 之前加上这段代码,整个文件路径就正确了:
std::string dest_filename = fileName; #if defined (POCO_WIN32_UTF8) std::wstring utf16_name = s2ws(fileName); UnicodeConverter::toUTF8(utf16_name, dest_filename); #endif Poco::Path file(dest_filename);
std::wstring Decompress::s2ws(const std::string& s) { setlocale(LC_ALL, "chs"); const char* _Source = s.c_str(); size_t _Dsize = s.size() + 1; wchar_t *_Dest = new wchar_t[_Dsize]; wmemset(_Dest, 0, _Dsize); mbstowcs(_Dest,_Source,_Dsize); std::wstring result = _Dest; delete []_Dest; setlocale(LC_ALL, "C"); return result; }
相关文章推荐
- POCO 的 Zip 类对中文文件名支持不正确的解决方法
- dotnetziplibrary(dotnetziplib)解压中文文件名乱码解决方法
- Linux下(手动编译)安装MPlayer 及 不支持中文文件名的解决方法
- Tomcat中中文文件名不支持的解决方法
- IIS服务器不支持中文文件名的解决方法
- ie 无法下载中文名文件 解决方法 【修改IIS5注册表可以支持中文文件名】
- IIS服务器不支持中文文件名的解决方法
- Tomcat中中文文件名不支持的解决方法
- 配置NGINX支持中文URL 中文文件名或目录404无法访问的解决方法
- Linux上安装7zip使用教程及zip中文文件名解压乱码解决方法。
- webservice studio 参数是DataSet时不支持中文 解决方法
- Linux 下网页不支持中文的解决方法
- php5.4以下版本json不支持不转义内容中文的解决方法
- ie浏览器出现“文件名、目录名或卷标语法不正确”的解决方法
- Mono环境下不支持中文的解决方法
- Mono环境下不支持中文的解决方法
- <img src="中文文件名" /> 无法显示图片,图片名改成英文就可以显示;试了下在电脑桌面写了个HTML测试下,可以显示中文名称的图片,解决方法
- IIS 文件名、目录名或卷标语法不正确解决方法一例
- ServU7不支持中文名的解决办法(Serv-U中文目录和文件名变乱码问题)
- jsp下显示中文文件名及绝对路径下的图片解决方法