【问题标题】:wxWidgets and converting to and from unicode code pointswxWidgets 和 unicode 代码点之间的转换
【发布时间】:2012-03-28 08:26:17
【问题描述】:

我想在文本中使用 \u 转义序列,但现在转换似乎很混乱。

据我了解\u 使用符号\uXXXX 其中X 是一个十六进制数字,并在utf8 中描述一个代码点?飞机?但是utf8是变长编码所以不一定是4位长?

那么如何转换wxString[0] -> '\uXXXX' 序列?我使用mb_str(wxConvUTF8) 还是什么?所有这些 un​​icode 转换的东西现在对我来说似乎真的很困惑。

以及如何处理相反的转换?如果我收到带有 '\uXXXX' 序列的输入,这是内联查找它们并转换为 unicode 字符以进行输出的正确方法?

【问题讨论】:

  • 没有“utf8 平面中的代码点”之类的东西。请更简单地描述您正在尝试做的事情。还要指定您使用的 wxWidgets 版本(2.8 或 2.9)——2.9 更容易处理这些东西。
  • 是的,这东西令人困惑。我同意 ravenspoint,如果你能更好地描述你想要做什么,这个问题会更好。 \u 符号看起来像是 C++11 的功能,请改用 \xstackoverflow.com/questions/6796157/…

标签: c++ unicode utf-8 wxwidgets


【解决方案1】:

那么如何转换 wxString[0] -> '\uXXXX'

你可以在 wxWidgets v2.9.x 中做到这一点

wxString x = L"\x014C";
const char* xbuf = (const char*)x.wc_str();
wxString y = wxString::Format("%s = \\u%02X%02X",x,xbuf[1],xbuf[0]);
wxMessageBox(y,"Unicode test");

产生这个:

注意字节在 xbuf 中的访问顺序。这不是跨平台的!这取决于字节如何存储在您机器上的单词中。这就是为什么经常使用 UTF8 而不是 UTF16 的原因。

【讨论】:

  • 把 fn_str() 用于看起来一点也不像文件名的东西真是太奇怪了。
  • "这就是为什么经常使用 UTF8 而不是 UTF16。" UTF-8 “经常使用”的原因是因为它不需要实际工作来支持许多 C 或 C++ API。他们只是像往常一样接受char*;他们不必采用新的字符串类型。
  • @NicolBolas 一个有趣的想法。是t true for the Windows API or wxWidgets v2.9.x, both use UTF16 and convert any ASCII or UTF8 string passed to them before doing anything else. For other libraries and OSs,我留给专家说吧。
猜你喜欢
  • 2018-12-11
  • 2017-08-05
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
相关资源
最近更新 更多