是否可以让char *
与C++(VC2010)中的utf8编码一起使用?
例如,如果我的源文件保存在utf8中,并且我编写如下内容:
const char* c = "aäáéöő";
这有可能使它成为utf-8编码吗?如果是的话,如何使用
char* c2 = new char[strlen("aäáéöő")];
动态分配,如果字符可以可变长度?
最佳答案
窄字符串文字的编码是实现定义的,因此,您确实必须阅读文档(如果可以找到的话)。快速实验表明,VC++(无论如何都是VC8)和g++(无论如何都是4.4.2)实际上只是从源文件中复制字节。字符串文字将使用您的编辑器保存它的任何编码方式。(这显然违反了标准,但这似乎是常见的做法。)
C++ 11具有UTF-8字符串文字,它允许您编写u8"text"
,并确保"text"
用UTF-8编码。但是我并不真正期望它能够可靠地工作:问题在于,为了做到这一点,编译器必须知道源文件的编码方式。极有可能的是,编译器编写者将继续忽略此问题,仅从源文件中复制字节,并仅通过证明源文件必须位于UTF-8中才能使这些功能正常工作来实现一致性。