4
如何使Android设备显示印度字符的复杂呈现?
请原谅这个问题的长度。我需要解释所有这一切,以帮助他人,并避免有帮助的贡献者在不要求澄清的情况下提供答案。 我的要求是:“使Android手机能够正确显示泰米尔语字符”。 阐述: 泰米尔语与其他印度语言一样,具有复杂的字符呈现系统。与基于英语或其他基于拉丁语的脚本不同,它具有由多个字符组成的字形(您在屏幕上看到的内容)。Android无法呈现此类复杂脚本(有例外)。我的目标是了解如何为Android手机或平板电脑提供这种功能。 到目前为止,我收集的背景很少: 要在屏幕上显示字形,Android首先需要一个合适的字体文件。Android设备的文件夹/ system / fonts很少。该文件夹中最有趣的文件是DroidSansFallback.ttf。顾名思义,当Android系统无法找到系统字体中的字符(可能是DroidSans.ttf或DroidSans-Bold.ttf等)时,它会回退以在DroidSansFallback.ttf中进行搜索。 通过从PC替换合适的字体文件(Latha.ttf或Lohit-Tamil.ttf-这些是Tamil的字体),DroidSansFallback.ttf将允许在设备中显示Tamil字符。它不是那么容易更换,它涉及使设备扎根并以可写的方式安装系统。 尽管有这些麻烦,即使替换了DroidSansFallback.ttf,所显示的泰米尔字符也无法正确呈现。泰米尔语字符“தி”是两个字符的连词,而不是显示为“தி”,而是显示为“த”。尽管这足以阅读短信,但不能用于阅读书籍等。 从Android 4.0开始,通过Android 4.x API概述中所述的浏览器支持泰米尔语和其他几种语言,如下所示。 Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex character support needed for combining glyphs) in WebView and the built-in Browser 注意的单词是“在WebView和内置浏览器中”,这意味着如果将Tamil字符呈现为HTML内容,则可以完美呈现,而不会以其他方式呈现。Opera和其他一些浏览器甚至在Android 4.0之前就通过替换图像而不是字符来做到这一点。 我注意到,在针对印度市场的少数设备中(例如LG Optimus One,大多数三星手机和平板电脑)能够在浏览器中甚至在浏览器外的位置(例如联系人,短信,文件名等)中正确显示泰米尔语令我惊讶的是,他们甚至在Android 2.3及更高版本中都做到了这一点。我还注意到,针对运行相同版本Android的非印度国家/地区的同一型号不支持泰米尔语字符显示。 这使我进行了进一步的研究,并得出一个结论,即Android(与其他基于Linux的操作系统一样)依赖于字体渲染引擎来显示这种复杂的字符。我遇到的两个引擎是Skia和Harfbuzz。我注意到LG在其设备中使用了skia,而三星在其设备中使用了Harfbuzz库来实现此功能。 我遇到了很多网站,建议更换这些库和字体。它不起作用,导致冻结。幸运的是,我使用clockworkmod进行了备份,因此恢复了手机。 尽管我已经与泰米尔语进行了解释,但这适用于大多数印度语言。 这里说到我的问题(如果你还在读书;)) 现在,远肯定很显然,一个TTF文件应该是目前提供的字符和相应的库(libskia.so或libharfbuzz.so)都必须正确地呈现它们。有谁知道这些制造商能够提供的能力吗?我什至准备从AOSP(Android开放源代码项目)构建自己的ROM。