【问题标题】:strange error with unicode translation [closed]unicode翻译的奇怪错误[关闭]
【发布时间】:2023-04-06 17:28:02
【问题描述】:

这段代码有点问题:

print "Таблица Unicode (русские буквы)".center(18*4)
i = 0

for c in "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"\
         "абвгдежзийклмнопрстуфхцчшщъыьэюя":
  u = unicode(c, 'koi8-r')  

在这里我尝试将俄语字母翻译成 Unicode,但出现错误:

SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xc0 in position 0: invalid start byte

但如果我像这样手动尝试:

u = unicode('A', 'koi8-r')
u = unicode('Б', 'koi8-r')

一切正常。有什么问题?

【问题讨论】:

  • 您确定您的文件是以 KOI8-R 编码存储的吗?而不是,例如,UTF-8(或 ISO-8859-1)?
  • 愚蠢的我!!!我忘了加上# -- coding:koi8-r --
  • 但是现在俄语单词显示错误(((
  • #!coding: koi8-r 声明源文件编码。源文件必须以该编码保存,否则您将得到不正确的字符。然后按照@Ignacio 的建议使用 Unicode 字符串。
  • 问题是你有一个包含 UTF-8 字符的字节字符串,而 for c in 只给你一个多字节序列的单个字节。尝试打印len('Б') 看看我的意思。

标签: python python-2.7 unicode


【解决方案1】:

首先使用unicode 字面量。

print u"Таблица Unicode (русские буквы)".center(18*4)

for c in (u"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
          u"абвгдежзийклмнопрстуфхцчшщъыьэюя"):
  print c

【讨论】:

  • 还要注意源文件和源编码声明应该一致。
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2023-04-08
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多