如何选择要使用的字符编码?

问题描述

在Python中,我们经常不得不使用subprocess.Popen将外部工具的输出从字节转换为字符串。我一直在使用UTF-8而不考虑太多,到目前为止,我还没有遇到任何问题。我遇到了一些人使用ASCII代替的代码,这让我开始思考如何知道要使用哪种编码,这有关系吗?

对于简单的字符串,似乎没有什么不同,例如:

>>> subprocess.check_output(['git','rev-parse','--short','HEAD'],encoding='ASCII')
'4091146\n'
>>> subprocess.check_output(['git',encoding='utf-8')
'4091146\n'

我了解到UTF-8是一个较大的字符集,因此“特殊”字符不能编码为ASCII:

>>> "Büster".encode('utf-8')
b'B\xc3\xbcster'
>>> "Büster".encode('ascii')
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\xfc' in position 1: ordinal not in range(128)

我猜编码取决于外部程序,那么我怎么知道要使用哪个编码?始终采用UTF-8是否安全?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)