Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从file/sqlite数据库读取unicode字符并在Python中使用_Python_Sqlite_Unicode - Fatal编程技术网

从file/sqlite数据库读取unicode字符并在Python中使用

从file/sqlite数据库读取unicode字符并在Python中使用,python,sqlite,unicode,Python,Sqlite,Unicode,我有一个带有unicode字符的变量列表,其中一些用于臭氧气体等化学品:如“O\u2083”。所有这些都存储在sqlite数据库中,该数据库用Python代码读取以生成O3。然而,当我阅读时,我得到了“O\\u2083”。sqlite数据库是使用包含字符串“O\u2083”等的csv文件创建的。我知道\u2083不是以unicode字符的形式存储在sqlite数据库中,而是以6个unicode字符的形式存储(即\,u,2,0,8,3)。在这种情况下,有没有办法识别unicode字符?现在,我的第

我有一个带有unicode字符的变量列表,其中一些用于臭氧气体等化学品:如“O\u2083”。所有这些都存储在sqlite数据库中,该数据库用Python代码读取以生成O3。然而,当我阅读时,我得到了“O\\u2083”。sqlite数据库是使用包含字符串“O\u2083”等的csv文件创建的。我知道\u2083不是以unicode字符的形式存储在sqlite数据库中,而是以6个unicode字符的形式存储(即\,u,2,0,8,3)。在这种情况下,有没有办法识别unicode字符?现在,我的第一个解决方法是创建一个函数来识别字符集并替换unicode字符。是否已经实施了类似的措施

重要的是要记住一切都是字节。要将字节拉入对您有用的内容,您必须知道在拉入数据时使用了什么编码。有太多不明确的情况,无法通过分析数据来确定编码。当您从程序中发送数据时,数据又会返回到字节。根据您使用的是Python2.x还是3.x,您对Unicode和Python的体验将大不相同


但是,您可以尝试编码,只需对错误执行“替换”。例如
字符串.encode(“utf-8”,“replace”)
将尝试编码为utf-8,并将问题替换为
——您也可以预先预测问题字符并替换它们,但这很快就会变得难以管理。查看类以获得更多替换选项。

记住所有内容都是字节,这一点很重要。要将字节拉入对您有用的内容,您必须知道在拉入数据时使用了什么编码。有太多不明确的情况,无法通过分析数据来确定编码。当您从程序中发送数据时,数据又会返回到字节。根据您使用的是Python2.x还是3.x,您对Unicode和Python的体验将大不相同

但是,您可以尝试编码,只需对错误执行“替换”。例如
字符串.encode(“utf-8”,“replace”)
将尝试编码为utf-8,并将问题替换为
——您也可以预先预测问题字符并替换它们,但这很快就会变得难以管理。查看类以获得更多替换选项。

如果有字节字符串(长度7),请解码Unicode转义

>>> s = 'O\u2083'
>>> len(s)
7
>>> s
'O\\u2083'
>>> print(s)
O\u2083
>>> u = s.decode('unicode-escape')
>>> len(u)
2
>>> u
u'O\u2083'
>>> print(u)
O₃
警告:用于打印字符的控制台/IDE需要使用支持该字符的编码,否则在打印时会出现
unicodeincodeerror
。字体还必须支持符号。

如果有字节字符串(长度7),请解码Unicode转义

>>> s = 'O\u2083'
>>> len(s)
7
>>> s
'O\\u2083'
>>> print(s)
O\u2083
>>> u = s.decode('unicode-escape')
>>> len(u)
2
>>> u
u'O\u2083'
>>> print(u)
O₃

警告:用于打印字符的控制台/IDE需要使用支持该字符的编码,否则在打印时会出现
unicodeincodeerror
。字体还必须支持符号。

SQLite允许您直接读取/写入Unicode文本
u'O\u2083'
是两个字符
u'O'
u'\u2083'
(您的问题有输入错误:
'u\2083'!='\u2083'

我知道u\2083不是以unicode字符的形式存储在sqlite数据库中,而是以6个unicode字符的形式存储(即u、\、2,0,8,3)

不要混淆
u'u\2083'
u'\u2083'
:后者是单个字符,而前者是4字符序列:
u'u'
u'\x10'
'\20'
在Python中被解释为八进制),
u'8'
u'3'

如果将单个Unicode字符
u'\u2083'
保存到SQLite数据库中;它存储为单个Unicode字符(只要抽象保持不变,数据库中Unicode的内部表示就不相关)


在Python 2上,如果模块顶部没有来自导入unicode文本的
,那么
'abc'
字符串文本将创建一个bytestring而不是unicode字符串——在这种情况下,
'u\2083'
'\u2083'
都是字节序列,而不是文本字符(
\uxxx
在ByTestRing中不被识别为unicode转义序列)。SQLite允许您直接读/写unicode文本。
u'O\u2083'
是两个字符
u'O'
u'\u2083'
(您的问题有一个输入错误:
'u\2083'!='\u2083'

我知道u\2083不是以unicode字符的形式存储在sqlite数据库中,而是以6个unicode字符的形式存储(即u、\、2,0,8,3)

不要混淆
u'u\2083'
u'\u2083'
:后者是单个字符,而前者是4字符序列:
u'u'
u'\x10'
'\20'
在Python中被解释为八进制),
u'8'
u'3'

如果将单个Unicode字符
u'\u2083'
保存到SQLite数据库中,它将作为单个Unicode字符存储(只要抽象保持不变,数据库中Unicode的内部表示就不相关)


在Python 2上,如果模块顶部没有来自导入unicode文本的
,那么
'abc'
字符串文本将创建一个bytestring而不是unicode字符串——在这种情况下,
'u\2083'
'\u2083'
都是字节序列,而不是文本字符(
\uxxx
在bytestrings中不被识别为unicode转义序列)。

谢谢,但问题是我只有unicode,但“\u2083”是6个字符,而不是我需要的一个。我需要的是将一个包含6个字符的字符串(“\u2083”)转换为一个unicode字符(\u2083,Ozone中的小3)我可以用unicode表做一个函数,并在必要时做一些替换,但如果有其他的管理方法的话