gpt4 book ai didi

c++ - 在以下情况下我是否需要使用 wstring

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:44 31 4
gpt4 key购买 nike

目前,我正在为一位中国客户开发一款应用。中国客户大多在其操作系统编码中切换到 GB2312 语言。我需要编写一个文本文件,它将使用 GB2312 进行编码。

  1. 我使用std::ofstream 文件
  2. 我在 MBCS 模式下编译我的应用程序,而不是 unicode。
  3. 我使用下面的代码,将 CString 转换为 std::string,并使用 ofstream 将其写入文件

std::string Utils::ToString(CString& cString) {
/* Will not work correctly, if we are compiled under unicode mode. */
return (LPCTSTR)cString;
}

令我惊讶的是。它只是工作。我认为我至少需要使用 wstring。我尝试做一些调查。

这里是生成的 MBCS.txt。

alt text http://sites.google.com/site/yanchengcheok/Home/stackoverflow0.PNG

  1. 我尝试打印一个名为脚的字符(其值为 0xBDC5)
  2. 当我用CString携带这个字符时,它的长度是2。
  3. 当我使用Utils::ToString转换为std::string时,返回的字符串长度为2。
  4. 我使用 std::ofstream 写入文件

我的问题是:

  1. 当我使用十六进制编辑器检查 MBCS.txt 时,值显示为 BD (LSB) 和 C5 (MSB)。但我使用的是小端机器。十六进制编辑器不应该显示 C5 (LSB) 和 BD (MSB) 吗?我从维基百科查。 GB2312似乎没有特定的字节顺序。
  2. 似乎使用 std::string + CString 对我来说效果很好。我可以知道在什么情况下,上述方法不起作用吗?什么时候应该开始使用 wstring?

最佳答案

关于 1. Endianness 是您在根据较小的单元序列化一个单元时遇到的问题(即,根据八位字节序列化 seizets)。我远不是 CJK 编码专家,但在我看来,GB2112 是一种编码字符集,可以与多种编码方案一起使用。维基百科页面中引用的用于 GB2112(ISO 2022、EUC-CN 和 HZ)的编码方案都是根据八位字节定义的。因此,如果序列化为八位字节,则不存在字节顺序问题。

将此与 Unicode 编码方案进行对比:UTF-8 是根据八位字节定义的,并且在序列化为八位字节时没有字节序问题,UTF-16 是根据 seizets 定义的,如果序列化为八位字节字节序必须指定,UTF- 32 是根据 32 位单元定义的,如果序列化为八位字节,则必须指定字节顺序。

关于c++ - 在以下情况下我是否需要使用 wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453225/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com