sublime text 3 因西里尔字母 str io.write() 而失败

sublime text 3 fails with Cyrillic str io.write()

我正在使用 sublime text 3 进行 python 编码。我在西里尔编码方面遇到了一些问题。

首先,即使构建(运行)任何包含西里尔文的文件,我也遇到了问题。但我找到了构建配置的解决方案,如下所示:

[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 环境中运行良好。因此,问题似乎出在 sublime 构建系统或我的 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 个实体中,实际上不是西里尔文,Whosebug 将其转换为:

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

我找到了解决办法。问题是在 sublime text python 环境中没有启用俄语本地化。所以现在我的 python 的构建配置看起来如下(指出没有这么糟糕的参数来解释器调用)。在控制台输出和写入文件一切顺利。

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