我正在为一家使用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的默认编码更改为其他任何内容,因此我认为这是阻止输出正确呈现的问题。
任何人都可以帮助我吗?非常感谢提前!
答案 0 :(得分:2)
我已经解决了这个问题。当我编写一个词典时,我遇到了这个问题。
#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()
答案 1 :(得分:1)
我无法将默认编码从UTF-8更改为其他任何内容
我认为UTF-8不会被用作控制台的默认编码:
文件“C:\ tools \ Python31 \ lib \ encodings \ cp437.py”
cp437是旧的DOS终端代码页,确实无法打印中文字符。
请参阅bug 1602以获取批处理文件,以使Windows和Python 3使用UTF-8(代码页65001)作为控制台,但通常控制台对于非ASCII字符一直非常破碎,并且将继续如此,直到有人更改Python以使用WriteConsoleW而不是标准的C IO函数。
答案 2 :(得分:0)
如果您自己打开cmd窗口,请在运行test.py之前键入以下命令: mode con cp select = 936
如果您的Python程序以其他方式启动,则必须使用正确的代码页打开其控制台窗口。