Pregunta

Estoy trabajando para una empresa que utiliza la versión de lenguaje de programación Python 3.1 como una obra causal ahora. Y me he encontrado con este problema:? Cómo imprimir algunos caracteres asiáticos codificados (chino, japonés, coreano) en el símbolo del sistema

hecho un poco de investigación y trató, pero no obtuvo suerte:

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

Es la última línea que podría causar este error:

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 >

No se puede cambiar el valor predeterminado codificación de UTF-8 a cualquier otra cosa, así que supongo que es el problema que impide la salida de que se queden correctamente.

Puede alguien ayudarme en esto? Muchas gracias por adelantado!

¿Fue útil?

Solución

Me han resuelto este problema. Cuando estoy programando un diccionario, me encuentro con este problema.

#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()

Otros consejos

  

No se puede cambiar la codificación predeterminada de UTF-8 a cualquier otra cosa

No creo UTF-8 se utiliza como la codificación predeterminada para su consola:

  

archivo "C: \ tools \ Python31 \ lib \ codificaciones \ cp437.py"

cp437 es la página de edad DOS terminal de código, que de hecho no puede imprimir caracteres chinos.

error 1602 para un hack archivo por lotes para hacer que Windows y Python 3 uso de UTF-8 ( código de la página 65001) para la consola, pero en general la consola ha sido siempre bastante roto para caracteres no ASCII, y seguirá siendo así hasta que alguien cambia Python para usar WriteConsoleW en lugar de las funciones estándar de C IO.

Si se abre la ventana de cmd usted mismo, escriba el siguiente comando antes de ejecutar test.py: modo con cp seleccionar = 936

Si su programa de Python comienza por algún otro medio, se tendrá que hacer que se abra la ventana de la consola con la página de código correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top