如何在 Android 上正确显示泰语变音符号?

Posted

技术标签:

【中文标题】如何在 Android 上正确显示泰语变音符号?【英文标题】:How to display Thai diactirics properly on Android? 【发布时间】:2013-02-24 13:37:34 【问题描述】:

简短的前言。泰文有可能出现在辅音上方的元音符号,也有出现在辅音上方的变音符号(DS);当元音和DS都出现时,它们出现在另一个之上,因此元音设置在辅音之上,DS设置在元音之上。

我正在编写一个以泰语显示文本的应用程序。在模拟器 (API 10) 中一切看起来都很完美,但在真实设备上却并非如此(带有 Gingerbread 2.3.6 的三星 GT-I9001)。

我准备了两张图片来说明问题。我有一个简单的布局,顶部只有一个 TextView;该视图中会显示两个词 พี่สาว 和 ไม้。

这就是它的样子(模拟器的截图):

第一个字符有元音和元音上方的 DS,最后一个字符只有 DS。

这是我手机的截图:

两个 DS 都向下滑动,现在元音和 DS 在第一个字符上方相互重叠。请注意,最后一个字符看起来比它应该的要低(它应该是整行高,就像您在第一个屏幕截图中看到的那样)。

我发现问题出在系统范围内:我将这些泰语单词复制到一个简单的网页中,然后将其加载到手机的网络浏览器中,但遇到了同样的问题。字体渲染好像坏了。

所以问题是:如何绕过这个?我是否需要安装字体(如何?)或一些语言包(再次,如何?),或者唯一的方法是升级 android

PS:在 Android 4.0.4 上没问题。可能只有旧版本会受到影响。

更新: WarrenFaith 就设置自定义字体给出​​了一个很有前途的建议。然而,这似乎并不像看起来那么简单。我尝试了几种不同的字体,包括 Roboto(在 ICS 中引入)、来自 msttf Linux 软件包的 Verdana 以及其他一些字体。为了查看字体是否真正加载和应用,我在文本中添加了一些拉丁文和西里尔文字符。

结果很有趣。只有拉丁文和西里尔文字符发生变化,泰文字符没有变化。看起来字体没有所需的字形,Android 将它们替换为使用某些默认字体呈现的字形。

(我不明白为什么 Roboto 不起作用;它是 Android 的官方字体——它不应该完全支持整个 Unicode 吗?)

所以看来我必须找到有泰语字形的字体。

我还在想 Android 4.0.4 默认使用什么字体。

Happy end:感谢 WarrenFaith 的建议、Google 和 this blog article。

【问题讨论】:

【参考方案1】:

如果默认文本/字体被破坏,您应该提供一种您知道可以使用的字体。要实现字体,您可以使用以下答案:

    Android - Using Custom Font Using a custom typeface in Android

【讨论】:

这看起来很有希望,但我无法验证它。我已经更新了我的问题。 终于找到合适的字体了。感谢您的帮助! @AlexanderDunaev,您使用哪种字体显示泰语?可以分享一下吗 @Jiju,我相信我已经下载了the article中提到的字体。请尝试一下,如果有帮助,请告诉我。

以上是关于如何在 Android 上正确显示泰语变音符号?的主要内容,如果未能解决你的问题,请参考以下文章

NLog 不能正确写入变音符号 [重复]

PDF中的德语变音符号

LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?

如何用MySQL REPLACE函数替换破碎的德语变音符号?

Microsoft Excel 破坏 .csv 文件中的变音符号?

删除变音符号,某些字母上的某些变音符号除外