如何使Android设备显示印度字符的复杂呈现?


42

请原谅这个问题的长度。我需要解释所有这一切,以帮助他人,并避免有帮助的贡献者在不要求澄清的情况下提供答案。

我的要求是:“使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。


Cyanogenmod具有显示从右到左显示文本的功能。Skia是图形渲染的标准配置。结果会有所不同,从一个ROM中获取一个Skia库并放入另一个ROM中可能是灾难性的,因为这需要从头开始构建,方法是采用AOSP源码,并用harfbuzz替换Skia并重新编译(您根本无法“只是”插入harfbuzz放入另一个未使用该库构建的ROM中-这些库是链接在一起的,因此,如果ROM的构建不知道harfbuzz,它将无法正常工作)
t0mm13b 2012年

1
@narayanan出于某种原因,网站m.oneindia.in/tamil可以在Android 4.1.2的Chrome中完美呈现泰米尔语。该网站在做什么,其他网站没有在做什么?
FMFF 2014年

Answers:


9

根电话

Android文件夹下/system/fonts包含一个名为“ DroidSansFallback.ttf” 的文件,该文件应包含所有语言字符。目前它缺乏对包括泰米尔人在内的许多人的支持。

您始终可以使用包含泰米尔字符的文件替换该文件,从而可以在手机上使用泰米尔语。

通过XDA Developers Thread-DroidSans Fallback Indic Font,用户已经尝试并成功在手机上使用了泰米尔语。

要完成此方法,您需要对手机具有root访问权限,以便访问/system和更改Fallback文件:

  • 阅读我如何为我的设备加根?如果您的手机还没有植根。
  • 关注XDA Developers线程,了解如何替换文件

    Using and Android SDK environment:
    
    First Copy the DroidSansFallback.ttf file into your sdcard,
    then issue the following commands:
    
    adb shell
    su
    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
    cd /sdcard
    busybox cp DroidSansFallback.ttf /system/fonts
    mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system
    exit
    exit
    
    Lastly, rebooted the phone
    

    注意:所有手机的挂载点都不相同。


安卓APP

尽管上述方法可能对某些用户有吸引力,但我确实更喜欢一个可用的APP。

此外,泰米尔语的键盘总数为247个字符,而英语键盘仅需要26个字符。因此,这在键入时成为一个主要问题:

参见维基百科::泰米尔语-写作系统

当前的泰米尔语文字包括12个元音,18个辅音和一个特殊字符āytam。元音和辅音组合形成216个复合字符,总共提供247个字符(12 + 18 + 1 +(12 x 18))


多亏了Krishan,并且正在研究这个问题,已经有了一个APP可以处理两个问题,泰米尔语在系统范围内的使用,以及可以用来键入泰米尔语字符的键盘。

阅读Krishan的帖子,标题为Android的Tamil Unicode字体– Working,以获取有关此解决方案开发的详细信息。

总结一下

克里山(Krishan)在Google Play上开发并发布了两个应用程序,这些应用程序完全可以解决在泰米尔语中拥有完整的Android操作系统的问题:


4
我已经提到过,替换字体只是部分解决方案,它将仅显示非连续字符,并且接合字符将无法正确呈现。而关于该应用程序的第二个解决方案对我来说并不是公认的解决方案。正如我所期望的那样,它提供了通过键入英语并转换并引用网页为例来撰写泰米尔语文本的方法。谢谢您的努力和时间。
Narayanan

3

您似乎正在描述问题4153,这是Android中的已知错误。

已报告此问题在Jelly Bean中已解决。如果此屏幕截图正确,则应解决此问题。(我无法真正告诉自己,但是我确实可以访问Jelly Bean并可以从中进行屏幕截图。)

Unicode的ICS测试页


1
谢谢,这似乎不仅仅是一个错误,正如我所说的那样,即使在制造商的某种干预下,泰米尔语渲染也可以在Android 2.3.3手机中正常工作。
Narayanan

1
2012年7月20日,我参加了Google的gDays,我目睹了Android JellyBean 4.1甚至在浏览器中也显示了泰米尔语字符。不幸的是,我不能再测试了。
Narayanan

关于问题android.stackexchange.com/questions/26797/…的评论,我想说我能够通过ThinkFree Office Mobile Viewer读取网页,文本文件,SMS,联系人,文件名,DOCX文件中的泰米尔语。我观察到泰卢固语,卡纳达语,孟加拉语和印地语也应该相同。
Narayanan

1

安装Opera Mini Web浏览器

在Opera Mini Web浏览器中,键入“ about:Config”

对复杂的脚本使用位图字体:选择是

您可以在任何品牌的手机中以泰米尔字体查看所有网站

问候


5
这是浏览器内部的位图,而不是操作系统范围内的解决方案(例如,您将无法在SMS中键入或查看泰米尔语或其他印度字符)。顺便说一句,您的建议已经在主要文章中提到:>“甚至在Android 4.0之前,Opera和其他少数浏览器都通过替换图像而不是字符来做到这一点。”

0

您无需在Android系统上植根并替换字体。

将设备的固件替换为印度地区类似的固件,以正确呈现Devanagari字体。其他地区的固件无法正确渲染Devanagari字体。Devanagari字体可在印度地区的Android版本2.x上正确呈现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.