我正在运行 Ubuntu 9.10(由于某些应用程序与更高版本不兼容而无法升级),并且安装了所有更新。
一位同事编写了一个 VB.Net 应用程序,它似乎可以在 Mono 下正确运行,但是文本框中的字符存在问题:如果它们不是严格的 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 上做些什么来补救这种情况?
答案1
我假设 VB.NET 应用程序使用的是 Microsoft 的 .NET GUI 内容,而不是 .NET 的 Gtk 或 Qt 绑定?只是猜测,但问题可能与 Windows(也许 .NET 也是?)使用 UCS-2(或 UTF-16?)和(大多数)Xorg 应用程序使用/期望 UTF-8 有关?
无论如何,看起来某个地方有一个错误,就像你说的,某些东西转换的次数太多了……