Unicode转换问题
Unicode conversion issues
这是一个关于Unicode的初学者问题。我正在使用Embarcadero c++ Builder 2009,他们应该改变默认字符串使用Unicode。
- 我在源代码编辑器中输入各种符号,这些符号不是标准"7位ASCII"的一部分。
- 我的程序正在使用c++ Builder的String类型来获取用户输入。
- 我还通过设置wchar_t的值手动添加输入。
似乎在如何解释这些符号方面存在冲突。有时我会得到一个符号,例如代码0x00C7 ('Ç'),但有时相同的符号被编码为0xFFC7,例如在源代码编辑器中。根据我的理解,前者是合适的Unicode,后者是"别的东西"。有人能证实吗?
我想知道这个"别的东西"编码是从哪里来的,以及如何摆脱它?
编辑:进一步的研究:似乎一个地方,其中0xFF**编码出现是当我做这样的事情:
string str = ...;
wchar_t wch = (wchar_t)str[i];
不管是std::string还是VCL string,结果都是一样的。wchar_t
与Unicode不一样吗?
我猜问题是在编译器中char
是有符号的(标准允许它有符号或无符号,它是实现定义的/特定的)。因此,每当您将第7位设置为1 (0x80到0xFF)的字符转换为任何更大的整数类型时,它都会被视为负值并进行符号扩展以保留负值,或者换句话说,这个第7位被复制到第8位,第9位等等,到更大整数类型的所有更高位。所以,0xC7可以变成0xFFC7和0xFFFFFFC7。为了防止这种情况的发生,先将chars
转换为unsigned chars
。
宽字符类型w_type是实现定义的,不需要对应于Unicode字符的概念。查看Unicode标准中w_type的描述。
如果" Ç "被更改为0xFFC7,它看起来非常像符号扩展,即字符内部存储为字节0xC7,然后将其作为带符号的8位整数转换为带符号扩展的16位整数。
相关文章:
- C++转换参数初始化问题
- 将父类对象强制转换为子类的问题
- 模板类转换问题 - 无法推断调用的函数
- 将旧管道转换为现代 openGL 时出现问题
- 将字节数组转换为带有字节序问题的指针
- 复制构造函数隐式转换问题
- 使用转换器提升 Python 问题 - 静态链接
- 与模板 (c++) 相关的转换问题
- 将文件复制到自定义位置,存在字符串转换问题
- 从基指针到派生的强制转换问题
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- PX 转换例程编译问题
- 类型转换问题
- C++,遇到将双精度转换为整数的问题
- 拆分 pybind11 模块和自动类型转换问题
- 类型转换问题:返回为整数而不是浮点/类型
- Unicode 字符问题/转换参数
- c++和OpenCV:问题转换图像到灰度