非英语字符变为“。” linux中的字符

时间:2011-05-05 09:50:36

标签: python django unicode localization character-encoding

我正在尝试创建一个“语言文件”,用于向我的Django应用程序添加本地化。

问题是,当翻译文本有一些非英文字符时,它们会被“。”取代。角色和Django抱怨这给出了错误。

例如:

English                        German 
Change Password                Passwort ändern

所以ä取代.

我不明白为什么我无法在文本文件中粘贴此文本。当我通过vi

打开它时,我可以将其粘贴到终端上,但不能粘贴到文件中

我在嵌入式设备上使用linux 2.6.32

准备语言文件时在Django中获取的错误消息是:

locale/de/LC_MESSAGES/django.po:472:70: invalid multibyte sequence

我不知道为什么会这样发生。有人可以提出一些解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

好的,我解决了我的问题。我得到错误无效的多字节序列,因为问题是.po没有正确编码。

我可以通过执行以下命令来确认:

file -i django.po

它给出了输出文件的编码类型为ISO-8859-1

因此,我使用以下命令将文件转换为“UTF-8”:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 django.po > django_utf8.po

然后用新生成的文件替换旧的django.po文件,“makemessages”和“compilemessages”就像魅力一样。

谢谢大家以上的回答。

希望这有助于将来的某个人!

答案 1 :(得分:0)

您的编码似乎有些不匹配。如今,Linux通常使用utf-8,但您可能仍然在某处设置了传统的iso-8859- n ,这会导致问题。另外django需要知道解释文件的编码。

  • Vim有选项encoding(指定内部使用的编码和其他两个的默认编码),fileencoding(指定读取和写入特定文件的编码( per-buffer))和termencoding(指定用于在终端上显示的编码;它不在图形版本中使用)。它允许通过向fileencoding命令添加++enc=标志来指定要打开的文件:edit。所以你打开文件,例如比如:e ++enc=utf-8 file.txt。尝试各种组合,直到角色正确显示,vim不会抱怨某些东西无法转换。比你知道你正在使用什么编码。
  • 在python中,默认情况下,只有ascii字符在字节字符串(str)和unicode(unicode)字符串之间进行转换。如果要打开不同编码的文件并对字符串进行排序,则必须使用codecs包的显式编码打开它。

如果它在django的某个地方打开,你必须找出如何告诉它编码。