相关疑难解决方法(0)

如何在Visual C++ 2008中创建UTF-8字符串文字

在VC++ 2003中,我可以将源文件保存为UTF-8,并且所有字符串都按原样使用.换句话说,以下代码将按字符串打印到控制台.如果源文件保存为UTF-8,则输出将为UTF-8.

printf("Chinese (Traditional)");
printf("??? (??)");
printf("??? (??)");
printf("Chinês (Tradicional)");
Run Code Online (Sandbox Code Playgroud)

我已经使用UTF-8 BOM保存了UTF-8格式的文件.但是使用VC2008进行编译会导致:

warning C4566: character represented by universal-character-name '\uC911' 
cannot be represented in the current code page (932)
warning C4566: character represented by universal-character-name '\uAD6D' 
cannot be represented in the current code page (932)
etc.
Run Code Online (Sandbox Code Playgroud)

导致这些警告的字符已损坏.适合语言环境的语言(在本例中为932 =日语)将转换为语言环境编码,即Shift-JIS.

我找不到让VC++ 2008为我编译的方法.请注意,我在源文件中使用的区域设置无关紧要.似乎没有一个语言环境说"我知道我在做什么,所以不要f $%## ng更改我的字符串文字".特别是,无用的UTF-8伪语言环境不起作用.

#pragma setlocale(".65001") 
=> error C2175: '.65001' : invalid locale
Run Code Online (Sandbox Code Playgroud)

"C"也不是:

#pragma setlocale("C") 
=> see warnings above (in particular locale is still 932)
Run Code Online (Sandbox Code Playgroud)

似乎VC2008强制所有字符进入指定的(或默认)语言环境,并且该语言环境不能是UTF-8.我不想更改文件以使用转义字符串,如"\ xbf\x11 ...",因为相同的源代码是使用gcc编译的,可以很好地处理UTF-8文件.

有没有办法指定源文件的编译应该保持字符串文字不变?

换句话说,在编译源文件时,我可以使用哪些编译标志来指定与VC2003的向后兼容性.即不要改变字符串文字,按字节顺序使用它们.

更新

感谢您的建议,但我想避免使用wchar.由于这个应用程序专门处理UTF-8中的字符串,因此使用wchar会要求我将所有字符串转换回UTF-8,这应该是不必要的.所有输入,输出和内部处理均采用UTF-8格式.这是一个简单的应用程序,在Linux和使用VC2003编译时工作正常.我希望能够使用VC2008编译相同的应用程序并使其工作. …

c++ utf-8 visual-c++

62
推荐指数
6
解决办法
5万
查看次数

VC在GCC中是否有像'-fexec-charset'这样的编译选项来设置执行字符集?

GCC有-finput-charset,-fexec-charset-fwide-exec-charset3个编译选项来指定参与"编译链"特殊编码.如下:

+--------+   -finput-charset     +----------+    -fexec-charset (or)    +-----+
| source | ------------------->  | compiler |  -----------------------> | exe |
+--------+                       +----------+    -fwide-exec-charset    +-----+
Run Code Online (Sandbox Code Playgroud)

参考:GCC编译器选项

我在-finput-charset这里找到了一个问题:MSVC++中的源字符集编码规范,如gcc"-finput-charset = CharSet".但我想知道是否VC有像-fexec-charsetGCC中那样的编译器选项来指定执行字符集.

我在Visual Studio中找到了一个似乎相对的选项:Project Properties/Configuration Properties/General/Character Set.价值是Use Unicode Character Set.它和-fexec-charsetGCC一样吗?这样我想将执行字符集设置为UTF-8.如何?

为什么我要设置执行的编码?

我正在用C++编写一个需要与db服务器通信的应用程序.桌子的字符集是utf8.在构建一些测试之后,测试将捕获在db表上的插入操作周围抛出的异常.例外告诉我他们遇到不正确的字符串值.我想它是由错误的编码造成的吗?顺便说一句,有没有其他方法来处理这个问题?

c++ gcc utf-8 character-encoding visual-c++

11
推荐指数
1
解决办法
1659
查看次数

标签 统计

c++ ×2

utf-8 ×2

visual-c++ ×2

character-encoding ×1

gcc ×1