sublime text 3失败了Cyrillic str io.write()

时间:2017-02-13 18:40:05

标签: macos utf-8 ascii sublimetext3 python-3.6

我正在使用sublime text 3进行python编码。我对西里尔语编码有一些问题。

首先,即使构建(运行)任何带有Cyrillic的文件,我也遇到了问题。但我找到了构建配置的解决方案如下:

[cmd: ['python3', '-u', '-c', "import sys; import codecs; sys.stdout = codecs.getwriter( 'utf-8' )( sys.stdout.detach() ); exec( compile( open( r'/.../ducksearch.py', 'rb' ).read(), r'/.../ducksearch.py', 'exec'), globals(), locals() )"]] [dir: /.../crowler] [path: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin]

所以现在对我来说没关系,它正在运行带有西里尔字符串的py文件。但是,当我试图用西里尔文写文件时,它会再次失败并发出这样的信息:

UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 197: ordinal not in range(128)

同时,python3 cmd和ipython env中的相同脚本运行良好。所以似乎问题出现在崇高的构建系统或我的cfg中。那么请你告诉我该怎么办才能让它正常工作?

这是我的代码:

utf_8_text = html.unescape(html_entities)

print(utf_8_text)

fi = open('./tmp/tmp.html', 'w')

try:
    fi.write(utf_8_text)
except Exception as e:
    raise e
finally:
    fi.close()

这是一些输入文本示例:

 Культура,помнениюЕрофеева,естьдистанциямеждучеловеком,такимкаконесть,итемобразом,вкоторомонсебявидит。 Неадекватность - причинасмехаислез,иронииитрагедии,определяющаяходистории,человеческоесуществование。 ВновойкнигеЕрофеевамирчеловека,культура,литература

原始输入在html实体中,实际上不是Cyrillic,它的stackoverflow将其转换为:

Культура, по мнению Ерофеева, есть дистанция между человеком, таким как он есть, и тем образом, в котором он себя видит. Неадекватность - причина смеха и слез, иронии итрагедии, определяющая ход истории, человеческое существование. В новой книге Ерофеева мир человека, культура, литература

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。问题是在崇高的文本python环境中没有启用俄语本地化。所以现在我的python构建配置看起来如下(指出解释器调用没有这样糟糕的args)。并且在控制台输出和文件写入都很顺利。

{
"cmd": ["python3", "-u", "$file"],
"env": {"LANG": "ru_RU.UTF-8"},
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}