繁体   English   中英

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

[英]Reading unicode characters from file/sqlite database and using it in Python

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

记住所有内容都是字节很重要。 要将字节提取到对您有用的东西中,您一定要知道在提取数据时使用哪种编码。 太多模棱两可的情况无法通过分析数据来确定编码。 当您从程序中发送数据时,所有数据又又回到了字节。 根据您使用的是Python 2.x还是3.x,您对Unicode和Python会有不同的体验。

但是,您可以尝试编码,并且只需对错误进行“替换”即可。 例如, the_string.encode("utf-8","replace")将尝试编码为utf-8,并用?替换问题? -您还可以预料到问题的特征并事先进行替换,但这很快就无法解决。 查看codecs类以了解更多替换选项。

如果您有字节字符串(长度为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需要使用支持字符的编码,否则在打印时会出现UnicodeEncodeError 字体也必须支持符号。

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

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

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

如果您将单个Unicode字符u'\₃'到SQLite数据库中; 它存储为单个Unicode字符(只要抽象成立,数据库内部Unicode的内部表示就无关紧要)。

在Python 2上,如果在模块顶部没有from __future__ import unicode_literals 'abc'字符串,则'abc'字符串文字会创建一个字节字符串而不是Unicode字符串-在这种情况下, 'u\\2083''\₃'都是序列字节数 ,而不是文本字符( \\uxxxx不被识别为字节 \\uxxxx内的unicode转义序列)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM