Как распечатать закодированные азиатские символы (gb2312) в командной строке?

StackOverflow https://stackoverflow.com/questions/1787497

Вопрос

Сейчас я работаю в компании, которая использует язык программирования Python версии 3.1 в качестве причинно-следственной работы.И я столкнулся с этой проблемой:как распечатать некоторые закодированные азиатские символы (китайский, японский, корейский) в командной строке?

Провел небольшое исследование и попробовал, но безуспешно:

import sys
import codecs
print(sys.getdefaultencoding()) # prints out UTF-8
fileObj = codecs.open("test.txt", "r", "eucgb2312_cn")
content = fileObj.read()
print(content)

Это последняя строка, которая может вызвать эту ошибку:

C:\Documents and Settings\Michael Mao\Desktop>test.py
utf-8
Traceback (most recent call last):
  File "C:\Documents and Settings\Michael Mao\Desktop\test.py", line 6, in <module>
    print(u)
  File "C:\tools\Python31\lib\encodings\cp437.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u5377' in position 3: character maps to < undefined >

Я не могу изменить кодировку по умолчанию с UTF-8 на что-либо другое, поэтому я считаю, что это проблема, препятствующая правильному отображению выходных данных.

Кто-нибудь может мне помочь в этом?Заранее большое спасибо!

Это было полезно?

Решение

Я решил эту проблему.Когда я программирую dict, я сталкиваюсь с этой проблемой.

#coding=utf-8
import codecs
import sys
# import imp
# imp.reload(sys) 
# sys.setdefaultencoding('utf8')
dictFileName = 'abstract.dict'
print(sys.getdefaultencoding())  
print(sys.stdout.encoding)

def readDict():
    print("start reading dict...")
    #dictObject = codecs.open(dictFileName,'rb', encoding = 'utf-8')#, encoding = 'utf-8')
    dictObject = open(dictFileName, 'rb')
    try:
        print('open file success!')
        #dictObject.seek(0x1852c)
        chunk = dictObject.read(0x5f0) #0x5f0
        print(len(chunk))
        #chunk = dictObject.read(0x1)
        print('read success')
        #print(chunk.decode("utf-8"))
        #print(chunk.encode('utf-8').decode('gb18030'))
        #sys.stdout.buffer.write(chunk.encode('gb18030'))
        sys.stdout.buffer.write(chunk.decode('utf-8').encode('gb18030'))
    finally:
        dictObject.close()
readDict()
input()

Другие советы

Я не могу изменить кодировку по умолчанию с UTF-8 на что-либо другое

Я не думаю, что UTF-8 используется в качестве кодировки по умолчанию для вашей консоли:

Файл "C: ools\Python31\lib\encodings\cp437.py "

cp437 - это старая кодовая страница терминала DOS, которая действительно не может печатать китайские символы.

Видишь ошибка 1602 для взлома пакетного файла, чтобы заставить Windows и Python 3 использовать UTF-8 (кодовая страница 65001) для консоли, но в целом консоль всегда была изрядно испорчена для символов, отличных от ASCII, и будет оставаться такой до тех пор, пока кто-нибудь не изменит Python на использование WriteConsoleW вместо стандартных функций ввода-вывода C.

Если вы сами откроете окно cmd, введите следующую команду перед запуском test.py:выбор режима con cp=936

Если ваша программа на Python запускается каким-либо другим способом, вам придется заставить ее открыть окно консоли с правильной кодовой страницей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top