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

时间:2016-04-15 06:07:02

标签: python string python-2.7 unicode

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

谢谢!

5 个答案:

答案 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)

你看到的是

之间的区别
  1. 打印字符串
  2. 打印列表
  3. 或者更一般地说,对象之间的区别"非正式"和#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中的字体,请执行:

  1. 单击cmd窗口左上方的cmd图标。
  2. 出现一个下拉菜单。选择属性。
  3. 从第二部分显示的列表中选择所需的字体。
  4. 单击“确定”。