您的位置:首页 > 编程语言 > Python开发

Sublime Text 的Unicode编码问题

2017-07-27 12:19 183 查看
【注】:下述操作过程是结合多种网络方法,然后自己实践的结果。写在这里,主要目的是加深记忆,也希望能帮助后来者


【问题】:使用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]
参考网址:https://stackoverflow.com/questions/15166076/sublime-text-2-encoding-error-with-python3-build/15174760#15174760
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
【后注】:下面的方法我曾尝试过,但是没有成功……放在这里,仅供参考
网上出现最多的方法是这样的:
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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐