有几种函数可以将ANSI转换为Unicode,反之亦然。这些是WideCharToMultiByteMultiByteToWideCharA2WW2A

现在我不明白A2WW2A的工作方式。 问题是,当您将某物转换为另一种东西时,应该有两组set A和set B,以便set A中的每个元素都唯一地映射到set B中的一个元素。 对此有几个问题:

  • ANSI是一个字节,而UNICODE至少是2个字节,这意味着并非UNICODE集中的所有元素都可以唯一地映射到ANSI。
  • 未严格定义ANSIUnicode。我的意思是两者都有不同的编码。

  • 在此,我的问题是:我们如何转换它们并确保我们没有破坏数据?

    最佳答案

    正如其他人提到的那样,没有这样的字符集称为“ANSI”。不幸的是,Windows API引用了CP_ACP,即“ANSI代码页”,它引用了几种字符集之一,具体取决于您在计算机上选择了哪种非Unicode语言环境。

    就是说,关于您的原始问题,不,您不能总是在CP_ACP和unicode编码之间往返。例如,在英语语言环境的Windows系统上,CP_ACP中的あ没有等效项。

    发生这种情况时,WideCharToMultiByte将使用lpDefaultChar替换不等效的字符(如果已设置),并将*lpUsedDefaultChar设置为true。您可以在lpUsedDefaultChar中传递一个指向 bool(boolean) 变量的指针,并在调用后检查它,以查看您的字符串是否包含不可翻译的字符。另一个方向MultiByteToWideChar只要输入在本地代码页中有效,就永远不会失败。要尝试检测无效文本,请传递MB_ERR_INVALID_CHARS标志并检查错误-也就是说,仅仅因为文本在其他代码页中,并不意味着您会从中得到错误(很难判断是否文字实际上是无效的,或者仅仅是乱码)。

    关于c++ - ANSI到Unicode或向后转换:怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13468073/

    10-13 05:26