【发布时间】:2015-02-12 05:44:52
【问题描述】:
我正在对 Linux 语言环境文件 /usr/share/i18n/locales(如 pt_BR)进行一些更改,以更改日期、时间、数字等的默认格式。但由于 unicode 字符以 <U9999> 格式的字符串呈现,因此文本是很难阅读。
这是它的一个sn-p:
LC_TIME
abday "<U0044><U006F><U006D>";"<U0053><U0065><U0067>";/
"<U0054><U0065><U0072>";"<U0051><U0075><U0061>";/
"<U0051><U0075><U0069>";"<U0053><U0065><U0078>";/
"<U0053><U00E1><U0062>"
那么,如何制作一个简单的脚本(可能是 bash、python、pearl 等等)来将这个替换 <Uxxxx> 代码的文本转换为它们的 ASCII 等价物? (是的,它们都是低于 255 的 ASCI 字符,大多数甚至低于 127)
如果收到多个答案,我会接受最优雅和/或更详细解释的答案(如命令中使用的选项和标志)
例如,上面的文本将被转换为:
LC_TIME
abday "Dom";"Seg";/
"Ter";"Qua";/
"Qui";"Sex";/
"Sáb"
另一个可以做相反的脚本的奖励点:将给定字符串的所有字符转换为<Uxxx> 格式。
谢谢!
【问题讨论】:
-
我认为 XML 万神殿中的工具可以更好地处理这个问题。我建议你用 XML 标记这篇文章(也许 XSLT 也是?)。祝你好运!
-
之所以使用 Unicode 表示法,是因为并非所有 Unicode 字符都有对应的 ASCII 字符。那么,你想对没有 ASCII 等价物的 Unicode 序列做什么(这是大多数 Unicode 序列 - 按可能序列的数量;不一定是大多数使用序列的数量)。
-
字符 U0080 到 U00FF(即从 128 到 255 的十进制)是 NOT ASCII。它们必须使用您选择的编码进行转换,在您的情况下可能是
latin1。 -
@shelter:好的,我添加了标签。简单的 linux 脚本(bash、python 等)中是否有任何处理 XML 的工具?
-
@Jonathan/John:是的,但在该文件 (pt_BR) 中,使用的 unicode 的 99% 实际上是 U0020 和 U0079 之间的 asci 字符。 80到FF之间的很少,没有超过FF的。所以它们可以在我的系统中完美打印。我不介意几个字符出错,只要 99% 的文本变得可读。它非常检查 ASCI 表非常耗时,逐个字符地解码字符串,如“%d %Y %z %HH:%MM”或“%d-%m-% Y”或“星期六”。我想更改日期、货币格式,但需要数小时才能解码,然后重新编码。因此需要一个脚本来帮助