免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2040 | 回复: 5
打印 上一主题 下一主题

问个字符编码转换的怪现象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-02 18:06 |只看该作者 |倒序浏览
windows下,借这里的人气问下,版主手下留情别删帖啊。

这个问题困扰好久了。原因是发现在windows下利用_mkdir创建文件夹是,参数变量字符串中如果含有无法正确编码的字符(如韩文日文等),就无法创建。
如果使用_T宏处理字符串,然后调用_tmkdir就能成功。但问题是我调用MultiByteToWideChar进行转换,怎么都无法创建成功,很郁闷。代码如下,帮忙看看:
  1. int _tmain(int argc, _TCHAR* argv[])
  2. {
  3.         char path[1024] = "같이";

  4.         wchar_t wpath[2048];
  5.         MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, sizeof(wpath));
  6.         //wchar_t wpath[2048] = _T("같이");
  7.         if (_tmkdir(wpath) < 0){
  8.                 printf("path:%s\n", path);
  9.         }

  10.         getchar();
  11.         return 0;
  12. }
复制代码
是不是TEXT宏和MultiByteToWideChar内部实现机理不同?

论坛徽章:
0
2 [报告]
发表于 2010-03-02 18:37 |只看该作者
TEXT宏? 这个是windows平台编译器内置的的。是在编译时转换成UTF-16的了。
如果需要使用Unicode的话,应该使用CreateDirectoryW这类函数。

论坛徽章:
0
3 [报告]
发表于 2010-03-02 18:45 |只看该作者
TEXT宏? 这个是windows平台编译器内置的的。是在编译时转换成UTF-16的了。
如果需要使用Unicode的话,应该 ...
pagx 发表于 2010-03-02 18:37



    请问能用MultiByteToWideChar完整实现TEXT宏的功能吗?看msdn里,第一个参数可以设置为CP_UTF8,但是似乎没有utf16。

论坛徽章:
0
4 [报告]
发表于 2010-03-02 18:48 |只看该作者
TEXT宏? 这个是windows平台编译器内置的的。是在编译时转换成UTF-16的了。
如果需要使用Unicode的话,应该 ...
pagx 发表于 2010-03-02 18:37



    在codepage中查到utf-16的编码是1200,设置之后运行还是不行。只有使用TEXT宏可以。怪了

论坛徽章:
0
5 [报告]
发表于 2010-03-02 18:56 |只看该作者
msdn上只是说:

_T or _TEXT:
  L (converts following character or string to its Unicode counterpart)

根本没解释采用什么方法转换成哪种Unicode,用惯了unix,windows下写代码真是郁闷。

论坛徽章:
0
6 [报告]
发表于 2010-03-03 17:53 |只看该作者
本帖最后由 pagx 于 2010-03-03 18:03 编辑

你的源文件编码不对吧。不是所有的unicode都能转换成GBK的。指望GBK 支持韩文是不现实的。建议你使用UTF-8来保存源文件。然后把CP_ACP修改成CP_UTF8吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP