Sublime Text 的Unicode编码问题

【注】:下述操作过程是结合多种网络方法,然后自己实践的结果。写在这里,主要目的是加深记忆,也希望能帮助后来者吐舌头
【问题】:使用Sublime Text 编译如下代码:print('中')时出错:
Traceback (most recent call last):
File "/Users/noiccy/Desktop/PythonCode/CodingProblem.py", line 1, in <module>
print('\u4e2d')
UnicodeEncodeError: 'ascii' codec can't encode character '\u4e2d' in position 0: ordinal not in range(128)
[Finished in 0.0s with exit code 1]
【原因】: ASCII 编码无法对 unicode 的中文进行编码,因此报错。Python 在  print unicode  时真正涉及到的是另一组编码:stdin/stdout/stderr 的编码,也就是标准输入、标准输出和标准错误输出的编码。
运行如下代码:
import sys
print(sys.stdin.encoding)
print(sys.stdout.encoding)
print(sys.stderr.encoding)
print('中')
【输出】
US-ASCII
US-ASCII
US-ASCII
Traceback (most recent call last):
File "/Users/noiccy/Desktop/PythonCode/CodingProblem.py", line 5, in <module>
print('\u4e2d')
UnicodeEncodeError: 'ascii' codec can't encode character '\u4e2d' in position 0: ordinal not in range(128)
[Finished in 0.1s with exit code 1]

【解决方法】:打开Python3.sublime-build文件,加上一行代码:"env": {"LANG": "en_US.UTF-8"},具体操作如下:
依次点击:Sublime Text->Preferences -> Browse Packages ->  User -> Python3.sublime-build (注:后两项是文件路径,可能存在差异)
加上  env那行代码,如下
{
"cmd": ["/Library/Frameworks/Python.framework/Versions/3.6/bin/python3", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"LANG": "en_US.UTF-8"}
}
如上操作之后,再运行代码:
import sys
print(sys.stdin.encoding)
print(sys.stdout.encoding)
print(sys.stderr.encoding)
print('中')
【输出】
UTF-8
UTF-8
UTF-8
[Finished in 0.1s]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【后注】:下面的方法我曾尝试过,但是没有成功……放在这里,仅供参考
网上出现最多的方法是这样的:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print('中')
但是,我的编辑器仍然报错……
Traceback (most recent call last):
File "/Users/noiccy/Desktop/PythonCode/CodingProblem.py", line 2, in <module>
reload(sys)
NameError: name 'reload' is not defined
[Finished in 0.1s with exit code 1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值