短篇小说:
在Locale::Maketext中我遇到了一个奇怪的问题。当在我的字典中使用“使用utf8”的语用时,有些东西会把德语符号变成ISO-8859-1编码。
长篇故事:
在我的web应用程序中,所有内容都保存在UTF-8中:
我使用Locale::Maketext作为L10N,所有麻省理工学院的词汇都是用Perl模块定义的,这些模块保存在UTF-8和“Useutf8”中。所有语言测试到目前为止(例如pt,pl,fr,en,zh,ko,et。A.)工作得很好,除了现场。只要在这门语言的词汇中启用"use utf8“,就可以将德语中的空话(可能是所有没有7位ASCII的内容)转换为ISO-8859-1。我有一个脚本来验证我的源树中的所有东西都是用UTF-8编码的(当然包括7位的ASCII )。
让我重复一遍:如果我删除模块MyApp::L10N::的"use utf8"实用程序,那么在中使用maketext后得到的编码是UTF-8,这很好。只要模块使用utf8,编码就会转换为ISO-8859-1,而所有其他语言都能工作。我非常想找出原因,因为这与我所读到的关于utf8实用主义的内容不完全相符。
我的问题很简单:为什么会发生这种情况?如何修复这种行为,即如何使我的应用程序在all源文件中使用utf8?
发布于 2010-12-16 10:51:30
我找到了一个解决方案:将所有输入和输出设置为utf8确实有效。Perl做了一些愚蠢的转换。
我刚把这个放在我剧本的开头:
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";发布于 2010-12-14 17:32:34
您正在经历的失败记录在地区::Maketext::Gettext中。
此Locale::Maketext::Gettext相对于原始Locale::Maketext(3)的一个基本好处是: GNU gettext是多字节安全的,但Perl源代码不是。…很抱歉这么说,但是本地化框架不具有多字节安全是很奇怪的。
建议您从Maketext迁移到一个基于Gettext的解决方案,请参阅拉西的显著的rocalisation咆哮:http://rassie.org/archives/247。
https://stackoverflow.com/questions/4441399
复制相似问题