python - 如何将*任何* Python 对象转换为字符串?

标签 python utf-8

我想将各种 Python 对象的列表连接成一个字符串。这些对象实际上可以是任何东西。我想我可以使用以下代码简单地做到这一点:

' '.join([str(x) for x in the_list])

但不幸的是,这有时会给我一个 UnicodeEncodeError:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 80: ordinal not in range(128)

this SO answer我发现有人说我需要使用 .encode('utf-8'),所以我将代码更改为:

' '.join([x.encode('utf-8') for x in the_list])

但如果对象不是字符串或 unicode,而是例如 int,我会得到一个 AttributeError: 'int' object has no attribute 'encode'。所以这意味着我需要使用某种 if 语句来检查它是什么类型以及如何转换它。但是什么时候应该使用.encode('utf-8'),什么时候应该使用str()

如果我也可以为此做某种单线效果会更好,但我不知道怎么做?还有人知道吗?欢迎所有提示!

最佳答案

Python 2.x 使用 repr()。如果您不介意结果中出现非 ASCII Unicode,Python 3.x 使用 repr(),如果您介意,则使用 ascii():

>>> a=1             # integer
>>> class X: pass
...
>>> x=X()           # class
>>> y='\u5000'      # Unicode string
>>> z=b'\xa0'       # non-ASCII byte string
>>> ' '.join(ascii(i) for i in (a,x,y,z))
"1 <__main__.X object at 0x0000000002974B38> '\\u5000' b'\\xa0'"

2.X 和 3.X repr() 以及 3.X ascii() 之间的差异示例:

>>> # Python 3
>>> s = 'pingüino' # Unicode string
>>> s
'pingüino'
>>> repr(s)
"'pingüino'"
>>> print(repr(s))
'pingüino'
>>> ascii(s)
"'ping\\xfcino'"
>>> print(ascii(s))
'ping\xfcino'    

>>> # Python 2
>>> s = u'pingüino'
>>> s
u'ping\xfcino'
>>> repr(s)
"u'ping\\xfcino'"
>>> print(repr(s))
u'ping\xfcino'

关于python - 如何将*任何* Python 对象转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340086/

相关文章:

python,pandas 进行分组 value_count()

javascript - Google Data Studio 连接器和应用脚本

php - TCPDF pdf 中的特定字体

c# - 如何检测 .NET StreamReader 是否在基础流上找到 UTF8 BOM?

mysql - Navicat 查询 - 从 utf8 到 varbinary

r - 使用R转换文件编码? (ANSI到UTF-8)

python - filter2D OpenCV 函数 c++

python - 将 folium map 插入 jinja 模板

python - 使用 pywin32 获取 GUIThreadInfo()

sql - 字符不在轨道 UTF8 中