【问题标题】:wxTextCtrl OSX mutated vowelwxTextCtrl OSX 变异元音
【发布时间】:2013-05-12 10:47:54
【问题描述】:

我在非 unicode 版本中使用 wxMac 2.8。我尝试将带有变异元音“ü”的文件读取到 wxtextctrl。当我这样做时,数据被解释为当前编码,但它是一个多字节字符串。我把问题缩小到这个:

text_ctrl->Clear();
text_ctrl->SetValue("üüüäääööößßß");

这是结果:

üüüäääööößßß

请注意,字符数增加了一倍 - 在 gdb 中打印字符串会显示“\303\274”,并且每个原始字符都类似。在 textctrl 中输入“ü”或类似名称是没有问题的。我尝试了各种 wxMBConv 方法,但结果总是一样的。有没有办法解决这个问题?

最好的问候,

【问题讨论】:

    标签: unicode wxwidgets multibyte


    【解决方案1】:

    如果您使用 7 位 ASCII 以外的任何内容,您必须使用 wxWidgets 的 Unicode 版本。只是帮自己一个忙,然后改用它。如果您有太多为 wxWidgets 2.8 及更早版本的“ANSI”构建编写的现有代码,并且无法使用 Unicode 构建进行编译,请使用 wxWidgets 2.9 代替它将编译的地方——并按预期工作。

    【讨论】:

    • 这是个好建议,但 must 有点夸张。如果你被 8 位 wxWidgets 卡住了,你仍然可以把事情做好。只需确保在获取数据后立即将所有内容转换为宽字符串的 utf-8。 (另外我不认为 OP 在她的 Mac 上使用 ANSI 版本)。
    • 这个问题明确表示“非 unicode”,除了“ANSI”,我看不出它还有什么意思。此外,确实,理论上您可以使一切都在 ANSI 构建中工作,特别是如果您可以更改您正在运行的语言环境(例如,确保它使用 UTF-8),但这很难做到在实践中,我强烈建议在这里忘记理论并做明智的事情。
    • 无论如何,我们很快就会切换到 wx 3.0,但我需要一个修补程序。因此,对于我的特殊问题,由于它是成功使用 wx 2.8 的大型应用程序中的一个点,是否可以使用 #ifdef 中的 Carbon/Cocoa 命令直接将文本输入发送到 Carbon/Cocoa textctrl?
    【解决方案2】:

    听起来您的文本编辑器(用于程序源代码)与正在运行的程序的编码不同。

    例如,假设您的文本输入控件和程序的其余部分(正确地)使用 UTF-8。现在,如果您的文本编辑器使用其他编码,那么在屏幕上看起来不错的字符串实际上将包含垃圾字节。

    假设您能够帮助创建一个纯 UTF8 世界,那么您应该:

    1) 使用转义符将 UTF-8 直接编码为字符串文字,例如“\303”或“\xc3”。这样做很烦人,但这意味着您不必担心您的文本编辑器(或其他开发人员的编辑器设置)。

    2) 然后检查程序是否到处都在使用 UTF-8。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      相关资源
      最近更新 更多