win7 console
番茄系统家园 · 2021-08-12 23:31:00

一些网站为了提高网页访问速度节省带宽,中文网页使用gbk编码,英文网页使用utf-8编码
编码转换
从上面对编码的介绍可以看出编码的转换只是特定编码(如GBK)和万国码(UCS-2,UTF-8)之间的转换。而不是说,我韩语的EUC-KR编码可以转为汉语GBK的编码。转换的过程如下:
查码表标准规则GBK----utfwin7 console-8EUC-KR----utf-8
而且转码时你需要先知道输入的是什么编码才能正确查找对应码表转换。程序并不能精准的判断一个字符串是什么编码,只是可以猜测它是某种编码的概率是多少。
文件的编码
是脚本语言,运行时才一条条解析命令,所以解析器解析脚本文件时需要指定一个编码方式。在里面解析器默认以编码方式解析,所以当你的脚本中有中文时,就会报如下这种错
#
!#哈哈哈("发发")
SyntaxError:Non-ASCIIcharacter'\xe5'infile./test.pyonline3,butnoencodingdeclared;seehttp://www.python.org/peps/pep-0263.htmlfordetails
这个问题的解决很简单,就是在脚本开头指定解析本文件的编码方式就可以了,就像这样加一句#coding=utf-8。加这一句只是指定解析文件的编码,还有一个编码就是文件的保存编码。在linux上文件默认以UTF-8编码,所以显示没有问题,有的编辑器可能默认以GBK编码,那么输出又有问题。
iconv-futf-8-tgbk
test.py-otest_gbk.py#把文件编码转为gbkchmod+xtest_gbk.py#加可执行权限./test_gbk.py#观察到输出乱码
所以#coding=utf-8这句是和文件保存的编码相对应的。
在python3中,默认以utf-8解码脚本,为了兼容2.x,代码里面还是可以加上这句。注意文件的保存也要使用utf-8编码方式保存。
python字符串的编码和输出
编码
python3字符串的编码默认是unicode的。encode是把unicode字符串转为字节流,decode是把字节流转为unicode字符串。打印字节流看到是字符串的码值,而看不到字符串,就像这样。
print('在佛山房'.encode('gbk'))b'\xd4\xda\xb7\xf0\xc9\xbd\xb7\xbf'
终端输出
最常见的输出是输出到控制台,这里面就包含一个过程。程序把一个字符串的字节序送到终端,终端收到这些字节后怎么处理,他怎么知道如何解码呢?终端也没那么聪明,就是用自己的默认编码来解码这些字节序。我们的终端默认是以GBK编码解码,所以把unicode编码的字符串转为GBK得到对应的GBK字符编码,然后查字体库,最后输出到终端。
unicode是万国码包含所有语言的文字,而GBK只包含中文,unicode转GBK不一定总能成功。所以在打印韩语时会出现UnicodeEncodeError:'gbk'codeccan'tencodecharacter'\uc7a5'inposition
0:illegalmultibytesequence的错。
把终端的默认编码改为utf-8是不是就可以正常输出了呢?
我们知道unicode和utf-8可以互转,按道理来说终端使用utf-8就可以打印所有语言的文字了。在windwos中设置console的默认编码为UTF-8执行chcp65001即可,就可以在属性的选项看到当前代码页为UTF-8。
但是win7韩语输出依然有问题,显示几行方框。显示方框是由于这个Lucidaconsole字体里面没有韩文字,但明明只打印一行却显示几行应该是windows的输出bug。在win10上测试,则可以正常显示了(字体默认为新宋体)。
怎么解决多国语言输出问题
还是不要折腾windows终端的输出问题了(windows终端也真心难用)。linux下默认utf-8输出,虽然可以输出多语语言,但依然会遇到字体限制导致输出方框和字体美观的问题。
linux下新宋体字体的多国语言输出
不使用新宋体,一些字符会显示方框,但可以看到新宋体的输出很丑。
还是输出到文件把!
参考:
http://www.cnblogs.com/feng18/p/5646925.html
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/post/31057.html。
