我正在运行 Ubuntu 9.10(由于某些应用程序与更高版本不兼容而无法升级),并安装了所有更新。
一位同事编写了一个似乎可以在 Mono 下正确运行的 VB.Net 应用程序,但是文本框中的字符存在问题:如果它们不是严格的 ASCII,它们会显示为框(典型的 Windows 替换字符)。
起初我认为这是希腊字符(我们使用的)的问题;但是,我尝试插入一些带重音的西方字符(例如 é,在典型的西方 1252 Windows 代码页中),这些也显示为框,因此严格来说这不是希腊语的问题。
我试图在文本框中输入希腊语:单词«Δοκιμή»(测试)。然后我选择了我输入的内容,按下 Ctrl-C,切换到本机文本编辑器并按下 Ctrl-V。结果是“Îοκιμή”,这是一个非常混乱的希腊词(认为 UTF-8 被解释为 Latin-1;我经常使用 Unicode,所以很容易识别这些东西 :) 但是,如果你想要要验证,请在支持 UTF-8 的终端中启动 Python 解释器并尝试:
>>> a="Îοκιμή"
>>> print a.decode("utf8").encode("latin1").decode("utf8")
Δοκιμή
这是我输入的)。
现在,该应用程序还嵌入了 Internet Explorer 控件;Mono 可以很好地模拟它(我认为它使用 Gecko 引擎),并且在该 IE 控件内的文本框中,我可以很好地输入并查看我想要的任何非 ASCII 字符。
我想知道我的单声道配置是否有问题,或者即使它是一个已知的错误;VB.Net 应该支持 Unicode,但我对它使用的标准控件的 Unicode 能力一无所知。
所以,如果你能帮助我,请指教:我可以在 Ubuntu 方面做些什么来纠正这种情况?
我假设 VB.NET 应用程序使用的是 Microsoft 的 .NET GUI,而不是 .NET 的 Gtk 或 Qt 绑定?只是猜测,但问题可能与 Windows(也可能是 .NET?)使用 UCS-2(或 UTF-16?)和(大多数)Xorg 应用程序使用/期望 UTF-8 的事实有关?
无论如何,看起来某处有一个错误,就像你说的那样,有些东西被转换了太多次......