【问题标题】:Weird behaviour with UNICODE text on windowsWindows 上 UNICODE 文本的奇怪行为
【发布时间】:2013-10-29 13:52:52
【问题描述】:

我的 win32 代码中有一些 UNICODE 文本。 我已经宣布它是这样的..

std::wstring a = Träna; //swedish for practice

我使用类似...的方式将该值复制到变量中

std::wstring b = a;

在调试时,我看不到我应该在b 中得到什么。 我应该在b 中得到Träna,但我得到的是Träna 这仅在 Windows 上观察到,该程序在 OS X 上运行良好。

我确定这是菜鸟的错误,我在这里错过了什么?

【问题讨论】:

  • 该程序可能在 Windows 上也可以正常工作,但您对结果的可视化已损坏。 (如果你通过红色镜头看一张白纸,它会看起来是红色的。这是否意味着这张纸很脏?)你需要摆弄你的调试器设置或其他东西。直接查看字节是确定的唯一方法。
  • 我猜你的源文件应该用字节顺序标记(“UTF8 with BOM”编码)保存。某些版本的 MSVC 存在一个错误,即编译器无法检测源文件编码,除非 BOM 存在并假定文件使用系统上设置的任何 8 位编码。
  • @R.MartinhoFernandes:不,他也可能遇到我所描述的错误。 Gcc 和 MSVC 以不同方式处理字符串中的编码。
  • 如果您将“ä”视为“ä”,您将看到在 windows-1251 中被误解的 UTF-8 编码字符(MS 误称:“ANSI”)或一些类似的编码。所以这意味着你的调试器使用了错误的字符编码。
  • 两个问题,首先是不使用 L 前缀作为字符串文字。您的文本编辑器编写以 utf-8 编码但可能没有 BOM 的源代码,因此编译器不知道如何正确读取文件,这进一步加剧了这种情况。文本编码在 C/C++ 中永远不会停止伤害。如果没有有效的源代码并提及您使用的编译器版本和/或 IDE,您将无法获得好的答案。

标签: visual-studio winapi unicode wstring


【解决方案1】:

正如上面的 @SigTerm 和 @jukka 所说,问题在于 UTF-8 编码。

将 cpp 文件保存为 Unicode UTF-8 with signature> 后,问题得到解决。 该文件之前以 Unicode UTF-8 without signature> 保存。 前缀 L 不是问题,我已经这样定义了我的变量。

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多