gpt4 book ai didi

Python 2.7 unicode 再次困惑

转载 作者:太空狗 更新时间:2023-10-29 11:21:49 24 4
gpt4 key购买 nike

我已经读过这个:

Setting the correct encoding when piping stdout in Python

我正在尝试坚持经验法则:“始终在内部使用 Unicode。解码您收到的内容,并对您发送的内容进行编码。

所以这是我的主文件:

# coding: utf-8

import os
import sys

from myplugin import MyPlugin
if __name__ == '__main__':
c = MyPlugin()
a = unicode(open('myfile.txt').read().decode('utf8'))
print(c.generate(a).encode('utf8'))

让我感到不安的是:

  • 我读入了一个 utf8 文件,所以我对其进行了解码。
  • 然后我强制将它转换为 unicode,它给出 unicode(open('myfile.txt').read().decode('utf8'))
  • 然后我尝试将它输出到终端
  • 在我的 Linux shell 上我需要将它重新编码为 utf8,我猜这是正常的 因为我一直在处理 unicode 字符串,然后输出它,我有将其重新编码为 utf8(如果我在这里错了请纠正我)
  • 当我在 Windows 下使用 Pycharm 运行它时,它是两次 utf8 编码的,这为我提供了 agréable, déjà 之类的东西。因此,如果我删除 encode('utf8') (将最后一行更改为 print(c.generate(a)) 然后它可以与 Pycharm 一起使用,但不会不再使用 Linux,我得到:'ascii' codec can't encode character u'\xe9' in position blabla 你知道这个问题。

如果我在命令行中尝试:

  • Linux/shell ssh:import sys sys.stdout.encoding 我得到 'UTF-8'
  • Linux/shell 在我的代码中:import sys sys.stdout.encoding 我得到None WTF??
  • Windows/Pycharm:import sys sys.stdout.encoding 我得到 'windows-1252'

最好的编码方式是什么,以便它适用于两种环境?

最佳答案

您的哲学是正确的,但您过度复杂化了事情并使您的代码变得脆弱。

以文本模式打开文件,自动为您转换为 Unicode。然后在没有编码的情况下打印 - 打印应该计算出正确的编码。

如果您的 Linux 环境设置不正确,请在您的 Linux 环境变量中设置 PYTHONIOENCODING=utf-8 (export PYTHONIOENCODING=utf-8) 来修复打印过程中的任何问题。您应该考虑将区域设置设置为 UTF-8 变体,例如 en_GB.UTF-8,以避免必须定义 PYTHONIOENCODING

PyCharm 无需修改即可工作。

您的代码应如下所示:

import os
import sys
import io

from myplugin import MyPlugin

if __name__ == '__main__':
c = MyPlugin()
# t is the default
with io.open('myfile.txt', 'rt', encoding='utf-8') as myfile:
# a is now a Unicode string
a = myfile.read()

result = c.generate(a)
print result

如果您使用的是 Python 3.x,请从 io.open() 中删除 import ioio.

关于Python 2.7 unicode 再次困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com