【问题标题】:MultiByteToWideChar converts (°) degree symbol to � [closed]MultiByteToWideChar 将 (°) 度符号转换为 � [关闭]
【发布时间】:2012-09-18 07:09:20
【问题描述】:

我正在尝试将字符串从 ANSII 转换为 Wide char。我正在使用CA2W(string,CP_UTF8),它在内部使用MultiByteToWideChar

调试时显示MultiByteToWideChar将°度符号转换为...。

关于如何解决这个问题的任何建议?

【问题讨论】:

  • 代码或者它没有发生......
  • 呵呵,我刚看了几分钟前最新的Old New Thing:blogs.msdn.com/b/oldnewthing/archive/2012/09/17/10349955.aspx
  • 我也很想知道他是如何确定这一点的。我已经看到了——字体中不存在字符,或者是非法编码,或者类似的东西——渲染器的人工制品,无论如何,不是编码的东西在正在显示的文本中。
  • 原始字节不是 utf-8 编码。尝试 CP_ACP 而不是 CP_UTF8。
  • 您确定string° 在UTF-8 中 吗?在我看来,调试器向您显示 ° 似乎不太可能,因为 Windows 仅允许您在转换上下文中使用 CP_UTF8,而不是作为活动代码页。

标签: c++ windows winapi unicode


【解决方案1】:

MultiByteToWideChar 从给定的编码转换为 UTF-16(即宽字符)。您需要确保指定正确的源编码,这可能不是 UTF-8。

由于 UTF-8 的编码方式,任何超过 ASCII 0x7f 的内容都表明 BYTE 是多字节字符序列的一部分,除非正确指定该序列,否则将导致“?”。更多关于多字节序列编码的信息可以在这里找到: http://en.wikipedia.org/wiki/UTF-8

基本上,你的源编码可能是基于系统当前的代码页,所以你需要在调用MultiByteToWideChar时指定CP_ACP。

【讨论】:

  • 谢谢有问题是来源。
猜你喜欢
  • 2013-08-22
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2018-07-26
  • 2010-09-15
相关资源
最近更新 更多