如何将 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
我 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