这是一个关于Unicode的初学者问题。我正在使用Embarcadero C++ Builder 2009,他们据说改变了默认字符串以使用Unicode。Unicode转换问题
- 我在我的源代码编辑器中输入了各种不符合标准“7位ASCII”的符号。
- 我的程序使用C++ Builder的String类型来获取用户输入。
- 我也通过将值设置为wchar_t来手动添加输入。
似乎在解释符号的方式上存在冲突。有时我会得到一个符号,例如代码0x00C7('Ç'),但有时候相同的符号会被编码为0xFFC7,例如在源代码编辑器中。据我了解,前者是合适的Unicode,后者是“别的东西”。有人能证实这一点吗?
我在想这个“别的东西”编码是从哪里来的,以及如何摆脱它?
编辑:进一步的研究:它似乎是0xFF的**出现编码,其中一个地方就是,当我做这样的事情:
string str = ...;
wchar_t wch = (wchar_t)str[i];
同样的结果不管它是的std :: string或VCL字符串。 wchar_t
与Unicode不一样吗?
如果使用utf-8进行编码,则每个unicode字符可能占用1,2或4个字节或更多。据我了解,wchar_t每个字符的大小总是2个字节,所以可能是问题所在。 – greatwolf 2011-12-21 10:23:16
@VictorT。那么我应该使用哪种字符类型?我认为普通** char **是8位。 – Lundin 2011-12-21 10:27:36
对于宽字符的字符串(Unicode),您应该使用'wstring'而非'string'。新的'String'类型使用以UTF-16存储的宽字符(不要担心其他编码,例如UTF8)。你的代码'string str = ...;'会丢失数据。那么你不应该在你的第二行需要演员阵容。 – 2011-12-22 16:13:30