在Python中,对于日语,中文和韩语,Python无法打印正确的字符串,例如日语,韩语和中文的hello
是:
こんにちは
안녕하세요
你好
打印这些字符串:
In [1]: f = open('test.txt')
In [2]: for _line in f.readlines():
...: print(_line)
...:
こんにちは
안녕하세요
你好
In [3]: f = open('test.txt')
In [4]: print(f.readlines())
[ '\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf\n', '\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94\n', '\xe4\xbd\xa0\xe5\xa5\xbd\n']
In [5]: a = '你好'
In [6]: a
Out[6]: '\xe4\xbd\xa0\xe5\xa5\xbd'
我的Python版本是2.7.11,操作系统是Ubuntu 14.04
如何处理这些'\xe4\xbd\xa0\xe5\xa5\xbd\n'
字符串。
谢谢!
答案 0 :(得分:3)
首先,您需要将文本作为unicode
阅读import codecs
f = codecs.open('test.txt','r','utf-8')
第二
当你打印时,你应该像这样编码
unicodeText.encode('utf-8')
第三
你应该确保你的控制台支持unicode显示
使用
print sys.getdefaultencoding()
如果没有 试试
reload(sys)
sys.setdefaultencoding('utf-8')
答案 1 :(得分:2)
我的python版本2.7.11和操作系统是Mac OSX,我写
こんにちは
안녕하세요
你好
到test.txt。我的节目是:
# -*-coding:utf-8-*-
import json
if __name__ == '__main__':
f = open("./test.txt", "r")
a = f.readlines()
print json.dumps(a, ensure_ascii=False)
f.close()
运行程序,结果:
["こんにちは\n", "안녕하세요\n", "你好"]
答案 2 :(得分:2)
你看到的是
之间的区别或者更一般地说,对象之间的区别"非正式"和#34;官方"字符串表示(see documentation)。
在第一种情况下,将使用unicode字符正确打印unicode字符串。
在第二种情况下,列表中的项目将使用表示打印,而不是字符串值。
for line in f.readlines():
print line
是第一个(好的)案例,
print f.readlines()
是第二种情况。
您可以通过此示例检查差异:
a = u'ð€œłĸªßð'
print a
print a.__repr__()
l = [a, a]
print l
这显示了您可以自己玩的特殊__str__()
和__repr__()
方法之间的区别。
class Person(object):
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def __repr__(self):
return '<Person name={}>'.format(self.name)
p = Person('Donald')
print p # Prints 'Donald' using __str__
p # On the command line, prints '<Person name=Donald>' using __repr__
即,在控制台上输入对象名称时看到的值由__repr__
定义,而使用print
时看到的值由__str__
定义。
答案 3 :(得分:0)
试试这个:
import codecs
fp = codecs.open('test.txt', encoding='utf-8')
for line in fp:
print line
答案 4 :(得分:0)
我也被同样的问题困扰。
这肯定是您使用的字体的局限性。
默认情况下设置为“ Consolas”。
您可以将其更改为“ MS Gothic ”或“ NSimSun ”。
我个人更喜欢后者。
它们都可以显示日文/中文字符,但是请确保将系统编码设置为sami在上述答案中提到的utf-8。
要更改cmd中的字体,请执行: