我正在使用由公司翻译系统生成的一组.po
文件(如果相关,则使用Pootle)。我无法使用.mo
实用程序(使用.po
运算符检查文件的格式)将这些文件转换为msgfmt
(-C
文件的二进制文件),我收到以下错误:
$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error
我已经广泛搜索了一种获取更多信息的方法,这些信息确实导致msgfmt
抛出此错误。
我也尝试删除文件的前几行(它们不是目录的一部分,只是注释或空翻译字符串)。
我倾向于认为这是一个文件编码问题,但我没有处理过这类事情,所以我更愿意承认这是用户错误。
有谁知道如何用这些文件更具体地诊断错误?此外,所有本地化文件都表现出相同的行为,而不仅仅是一个特定的文件。
我的猜测也是这是一个编码问题。由于错误已经出现在文件的前几个字符中,因此罪魁祸首可能是byte order mark,其在utf-8中被编码为字节序列0xEF,0xBB,0xBF。检查这个的最好方法是使用十六进制编辑器查看文件,或使用可以告诉您文件是否包含字节顺序标记的编辑器。
例如在vim中你可以使用set bomb?
它会告诉你bomb
或nobomb
。
编辑:Here是某人的博客条目,其中包含由字节顺序标记开头的utf-8编码文件引起的完全相同的错误消息。
在vim中打开文件并输入:set bomb?所有那些容易出错的行都是一个接一个地输入它。