12

我正在使用.po公司翻译系统生成的一组文件(如果相关,使用 Pootle)。我无法使用实用程序(使用检查文件格式的运算符)将这些文件转换为.mo(文件的二进制对应),我收到以下错误:.pomsgfmt-C

$ msgfmt -v -C default.po
default.po:1:2: syntax error
msgfmt: found 1 fatal error

我已经在 Google 上进行了相当广泛的搜索,以获取更多关于究竟是什么导致msgfmt引发此错误的信息。

我还尝试删除文件的前几行(它们不是目录的一部分,只是注释或空翻译字符串)。

我倾向于认为这是一个文件编码问题,但我没有处理太多这类事情,所以我更愿意承认这是用户错误。

有人知道我如何更具体地诊断这些文件的错误吗?此外,所有本地化文件都表现出相同的行为,而不仅仅是一个特定文件。

4

3 回答 3

8

我的猜测也是,这是一个编码问题。由于错误已经出现在文件的前几个字符中,因此罪魁祸首可能是字节顺序标记,它在 utf-8 中被编码为字节序列 0xEF、0xBB、0xBF。检查这一点的最佳方法是使用十六进制编辑器查看文件,或者使用可以告诉您文件是否包含字节顺序标记的编辑器。

例如,您可以在 vim 中使用set bomb?,它会告诉您bombnobomb

编辑: 是某人的博客条目,该条目具有由以字节顺序标记开头的 utf-8 编码文件引起的完全相同的错误消息。

于 2012-04-03T15:21:05.530 回答
8

这听起来几乎肯定是 BOM 的问题,PO 文件不应该包含它们。另一种方法是从 Translate Toolkit 运行pocompile,因为您已经在使用Pootle,因此您的系统上应该已经安装了 pocompile。

于 2012-09-13T08:15:03.347 回答
0

在 vim 中打开文件并输入:set bomb? 并继续输入它将所有那些容易出错的行一一输入。

于 2019-03-05T13:22:47.097 回答