如何将 unicode u'\xb0C' 从 SQL 更改为 python 中的字符串 °C?

How do I change unicode u'\xb0C' from SQL to string °C in python?

我 SELECT 来自 SQL 的数据进入 temp_data 字典,但是有一个像 "u't_unit': u'\xb0C'" 这样的单位值,我无法在 python。

Python代码:

temp_data = [{u'thresh_id': 508, u'app_guid': u'7D83E6F8D879BE17C95D14879159973A', 
u'override': 1, u'thresh_guid': u'BB8F3E8184783E0416EEA7D19D9C9FBC', 
u'app_id': 1102, u'edit_user': 1, u'h_range': Decimal('100.000'), 
u't_type': 1, u't_value': Decimal('0.000'), u'l_range': Decimal('0.000'), 
u't_unit': u'\xb0C', u'edit_date': datetime.datetime(2019, 4, 30, 4, 24, 44), 
u'name': u'Sensor Temperature High Major'}]  

我使用以下代码获取我需要的值:

Python代码:

b = []  
for i in temp_data:  
    a = ('Dynamic', i['name'], i['thresh_id'], i['t_unit'], i['t_value'], i['l_range'], i['h_range'])  
    b.append(a)  
    b = [tuple(str(item) for item in t) for t in b]  
final_data = (",".join(map(str,b)))  

收到错误信息
UnicodeEncodeError: 'ascii' 编解码器无法对位置 0 中的字符 u'\xb0' 进行编码:序号不在范围内 (128)

预期结果:

('Dynamic', 'Sensor Temperature High Major', '508', '°C', '0.000', '0.000', '100.000') 

我尝试用'u'\xb0C'.encode('utf8')'来转换它,但它不起作用。

如何才能得到预期的结果?
非常感谢你。

我想你使用 python 2.*。那是因为你正在打印元组。例如,如果您访问特定值,您将看到它正常打印。试试这个:

b = []
for i in temp_data:
    a = ('Dynamic', i['name'], i['thresh_id'], i['t_unit'], i['t_value'], i['l_range'], i['h_range'])
    print(i['t_unit'])  # prints °C
    print(a[3])  # prints °C

在处理 Python 2 中的 unicode 数据时,始终使用 unicode and str 类型很重要。理想情况下,仅在您的应用程序中使用 unicode,并且仅在必要时接收输入或生成输出时才与 str 相互转换。

temp_data中的值要么是unicode,要么是非字符串类型,所以我们希望将它们作为unicode对象处理,而不是str.

>>> b = []
>>> for i in temp_data:
...     a = ('Dynamic', i['name'], i['thresh_id'], i['t_unit'], i['t_value'], i['l_range'], i['h_range'])
...     b.append(a)
...     # Cast items to unicode, not str
...     b = [tuple(unicode(item) for item in t) for t in b]
... 
>>> # Now all our items are unicode strings
>>> b
[(u'Dynamic', u'Sensor Temperature High Major', u'508', u'\xb0C', u'0.000', u'0.000', u'100.000')]
>>> # Join each tuple with unicode strings as the join value.
>>> final_data = (u','.join(u','.join(x) for x in b))  
>>> # Now the data prints correctly.
>>> print final_data
Dynamic,Sensor Temperature High Major,508,°C,0.000,0.000,100.000