none
VC能不能处理utf-8编码的源文件? RRS feed

  • 问题

  • 我用的是Visual Studio 2008,能不能创建utf-8编码的源文件呢?我是想让里面的中文直接就是utf-8的。例如:
    strcpy(strToSend, "你好");
    send(s, strToSend, len, 0);
    就是说直接让程序中的字符串常量就是utf-8的,这一点在Linux中可以做到,源文件只要是utf-8的,那么汉字串常量就是utf-8的,不用转换。
    但是在VC中怎么做到这一点?我直接用utf-8编码的源文件会报错(不识别的字符)。
    另外,微软是否没有提供将GBK直接转换成utf-8的方法?是不是只能先转到Unicode,再转到utf-8?
    另外,请问怎么能让程序通吃所有编码格式?
    LHL
    2010年2月2日 8:13

答案

  • 貌似vs不支持这个

    建立工程的时候有个选项,只可以指定资源文件中字符串的编码方式

    通吃所有编码只能使用unicode

    如果用MFC,转换就很方便 CA2W CW2A之类的
    比如转换成UTF-8 
    CStringA utf8Str = (LPCSTR)CW2AEX<>((LPCWSTR)CA2W(ansiStr), CP_UTF8);
    • 已标记为答案 lhlzhxh 2010年2月8日 5:19
    2010年2月5日 3:48
  • 不支持,只支持Unicode和Ansi,要用Utf8必须转换,建议自己定义一个宏调用对应API转换。

    和CodePage没关系吧,CodePage只和源代码有关,和编译出来的文件里的文字编码无关。
    0xBAADF00D
    • 已标记为答案 lhlzhxh 2010年2月8日 5:19
    2010年2月6日 11:52
    版主
  • 在Linux中用gcc编译,如果源文件是utf-8编码的,那么编译出来的程序的字符常量就是utf-8的,源文件是gbk的,那么字符常量就是gbk的。
    看来VC是不能这样的,只能运行时转换了。
    LHL
    • 已标记为答案 lhlzhxh 2010年2月8日 5:22
    2010年2月8日 5:22

全部回复


  • MultiByteToWideChar
    http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx


    麻烦把正确答案设为解答。
    2010年2月2日 9:00
    版主
  • 谢谢,不过MultiByteToWideChar和WideCharToMultiByte这两个函数我知道,我的问题不是这个。


    LHL
    2010年2月3日 1:56
  • 可能是你的windows不支持对应文件类型的code page。
    在Regional and Language Options中添加对应文件的code page
    麻烦把正确答案设为解答。
    2010年2月5日 1:08
    版主
  • 我用记事本可以查看utf-8编码的文件。应该不是代码页的问题吧。我的系统是默认安装的,从来也没修改过相关的东西。IE里面看utf-8的网页也没问题。
    另外,Windows的终端对文字编码的支持也很差,unicode的汉字无法在里面显示。例如,wprintf(L"你好!");是无法显示的。
    LHL
    2010年2月5日 1:37
  • 貌似vs不支持这个

    建立工程的时候有个选项,只可以指定资源文件中字符串的编码方式

    通吃所有编码只能使用unicode

    如果用MFC,转换就很方便 CA2W CW2A之类的
    比如转换成UTF-8 
    CStringA utf8Str = (LPCSTR)CW2AEX<>((LPCWSTR)CA2W(ansiStr), CP_UTF8);
    • 已标记为答案 lhlzhxh 2010年2月8日 5:19
    2010年2月5日 3:48
  • 不支持,只支持Unicode和Ansi,要用Utf8必须转换,建议自己定义一个宏调用对应API转换。

    和CodePage没关系吧,CodePage只和源代码有关,和编译出来的文件里的文字编码无关。
    0xBAADF00D
    • 已标记为答案 lhlzhxh 2010年2月8日 5:19
    2010年2月6日 11:52
    版主
  • 在Linux中用gcc编译,如果源文件是utf-8编码的,那么编译出来的程序的字符常量就是utf-8的,源文件是gbk的,那么字符常量就是gbk的。
    看来VC是不能这样的,只能运行时转换了。
    LHL
    • 已标记为答案 lhlzhxh 2010年2月8日 5:22
    2010年2月8日 5:22