Python,如何打印日文、韩文、中文字符串

2024-05-17 14:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在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'字符串。

谢谢!


Tags: 字符串intesttxtlineopenxa0xbd
3条回答

你看到的是

  1. 打印字符串
  2. 打印列表

或者更一般地说,对象“非正式”和“正式”字符串表示(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__定义。

我的python版本2.7.11和操作系统是Mac OSX,我写道

こんにちは
안녕하세요
你好

测试.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", "你好"]

首先,您需要将文本读取为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')

相关问题 更多 >