将非英语字符转换为Unicode(UTF-8)

时间:2012-01-28 13:53:49

标签: unicode character-encoding fonts tamil

我将大量文本从另一个系统复制到我的电脑上。当我在PC上查看文本时,看起来很奇怪。所以我从其他PC上复制了所有字体并将它们安装在我的中。现在文本看起来还不错,但实际上它似乎不是Unicode。例如,如果我复制文本并粘贴到另一个支持UTF-8的编辑器(如Notepad ++),我会得到英文字符(“bgah;”),如下所示。 enter image description here

如何将整个文本转换为unicode文本,如下所示。所以我可以复制文本并粘贴到其他地方。

பெயர்

上述文字是使用http://www.google.com/transliterate/indic/Tamil

手动获取的

我需要完成此转换,因此我可以将它们复制到数据库表中。

4 个答案:

答案 0 :(得分:5)

'Ja-01'是一种带有自定义'可视编码'的字体。

也就是说,字符序列确实是“bgah”;它只对你来说像泰米尔语,因为拉丁字符bg的字体形状看起来像பெ

这总是要避免,因为将内容存储为“bgah”;你失去了搜索和处理它作为真正的泰米尔语的能力,但这种方法在前Unicode时代很常见,特别是对于没有成熟编码标准的不太广泛的脚本。该应用可能早于TSCII的广泛使用。

因为它是一种不被任何其他字体共享的自定义编码,所以您很可能找不到将此编码内容转换为正确Unicode字符的工具。它似乎不是任何标准字符排序,因此您必须查看字体(例如在charmap.exe中)并记下每个字符,找到Unicode中的匹配字符并在它们之间进行映射。

例如,这里有一个简单的Python脚本来替换文件中的字符:

mapping= {
    u'a': u'\u0BAF',   # Tamil letter Ya
    u'b': u'\u0BAA',   # Tamil letter Pa
    u'g': u'\u0BC6',   # Tamil vowel sign E (combining)
    u'h': u'\u0BB0',   # Tamil letter Ra
    u';': u'\u0BCD',   # Tamil sign virama (combining)
    # fill in the rest of the mapping information here!
}

with open('ja01data.txt', 'rb') as fp:
    data= fp.read().decode('utf-8')
for char in mapping:
    data= data.replace(char, mapping[char])
with open('utf8data.txt', 'wb') as fp:
    fp.write(data.encode('utf-8'))

答案 1 :(得分:4)

您找到的字体会让您遇到麻烦。实际的单元格文本是“bgah;”,它会被渲染为“பெயர்”,因为您找到了一个可以使用8位非Unicode字符的字体。阅读它或将其粘贴到Notepad ++中会产生“bgah”;因为这是真正的文本。它只能通过强制显示字符串的程序使用相同的字体再次正确呈现。

抛弃字体并输入Unicode,如下所示:

enter image description here

答案 2 :(得分:2)

“bgah”看起来像一个基于Baamini的系统,它是pre-unicode。它在90年代在加拿大(以及一般的SL Tamil侨民)很受欢迎。

正如其他人所提到的,它看起来像一个自定义的可视编码,在保持ASCII编码的同时模仿外部脚本的性能。

Google“Baamini to unicode convertor”。科伦坡大学似乎放了一个:http://www.ucsc.cmb.ac.lk/ltrl/services/feconverter/?maps=t_b-u.xml

如果有效,请告诉我。如果没有,我可以四处询问,为你找些东西。

答案 3 :(得分:0)

您可以先检查编码是否为TSCII,因为这听起来很可能。它是一个8位编码,您复制的字体可能基于该编码。看看SourceForge上的TSCII to UTF-8 converter是否合适。该项目名为“任何泰米尔语编码为Unicode”,但they say that only TSCII is supported for now