Skip to content

biber 报错syntax error: found "茂录聦"

log
syntax error: found "茂录聦", expected end of entry ("}" or ")")

请检查*.bib,应该是有 ASCII 逗号,误写成全宽逗号了。

以下是报错如此迷惑的原因。

为何会出现茂录聦ï¼\x8c

显示日志

biber main.bcf会把日志存到main.blg里,这个文件中存的字节是b'\xc3\xaf\xc2\xbc\xc2\x8c',它按 GB 18030 解码是'茂录聦',按UTF-8解码是'ï¼\x8c'。因此,有些环境下报错说found "茂录聦",有些则说found "ï¼\x8c"

生成日志

那么为什么会有b'\xc3\xaf\xc2\xbc\xc2\x8c'呢?将全宽逗号','按UTF-8编码,然后将结果作为Unicode码位再按UTF-8编码,两次编码后即为这串字节。

python
>>> from unicodedata import lookup, name

>>> '茂录聦'
'茂录聦'

>>> _.encode('gb18030')
b'\xc3\xaf\xc2\xbc\xc2\x8c'

>>> bytes(map(ord, _.decode('utf8')))
b'\xef\xbc\x8c'

>>> _.decode('utf8')
','

>>> name(_)
'FULLWIDTH COMMA'

>> ','
','

>> _.encode('utf8')
b'\xef\xbc\x8c'

>> ''.join(map(chr, _))
'ï¼\x8c'

验证

*.bib里写各种乱七八糟东西,发现报错都符合预期。

bibtex
@article{Jiang2005Size,
  title = {形状记忆聚合物研究现状与发展},
  author = {姜敏 and 彭少贤 and 郦华兴},
  journal = {现代塑料加工应用},
  volume = {17},
  number = {2},
  pages = {53-56},
  year = {3001},,©孔乙己äüïabc,,
}