当前位置: 首页 > 面试题库 >

Python中unicode()和encode()函数的用法

羊慈
2023-03-14
问题内容

我在对 路径 变量进行编码并将其插入 SQLite 数据库时遇到问题。我试图用无济于事的 encode(“ utf-8”)
函数解决此问题。然后,我使用 unicode() 函数为我提供 unicode 类型。

print type(path)                  # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8")       # <type 'str'> strange
path = unicode(path)              # <type 'unicode'>

最终我获得了 unicode 类型,但是当 path 变量的类型为 str 时,仍然出现相同的错误 __

sqlite3.ProgrammingError:除非使用可以解释8位字节串的text_factory(如text_factory =
str),否则不得使用8位字节串。强烈建议您改为将应用程序切换为Unicode字符串。

您能帮我解决此错误,并解释encode("utf-8")unicode()功能的正确用法吗?我经常为此而斗争。

编辑:

execute() 语句引发错误:

cur.execute("update docs set path = :fullFilePath where path = :path", locals())

我忘记更改具有相同问题的 fullFilePath 变量的编码,但是现在我很困惑。我应该只使用 unicode() 还是 encode(“
utf-8”)
还是两者都使用?

我不能用

fullFilePath = unicode(fullFilePath.encode("utf-8"))

因为它会引发此错误:

UnicodeDecodeError:’ascii’编解码器无法解码位置32的字节0xc5:序数不在范围内(128)

Python 版本是 2.7.2


问题答案:

您使用encode("utf-8")不正确。Python字节字符串(str类型)具有编码,而Unicode没有。您可以使用将Unicode字符串转换为Python字节字符串uni.encode(encoding),也可以使用s.decode(encoding)(或等效于unicode(s, encoding))将字节字符串转换为Unicode字符串。

如果fullFilePathpath当前是str类型,则应该弄清楚它们是如何编码的。例如,如果当前编码为utf-8,则可以使用:

path = path.decode('utf-8')
fullFilePath = fullFilePath.decode('utf-8')

如果这不能解决问题,则实际的问题可能是您未在execute()呼叫中使用Unicode字符串,请尝试将其更改为以下内容:

cur.execute(u"update docs set path = :fullFilePath where path = :path", locals())


 类似资料:
  • 主要内容:Python encode()方法,Python decode()方法前面章节在介绍 bytes 类型时,已经对 encode() 和 decode() 方法的使用做了简单的介绍,本节将对这 2 个方法做详细地说明。 我们知道,最早的字符串编码是 ASCII 编码,它仅仅对 10 个数字、26 个大小写英文字母以及一些特殊字符进行了编码。ASCII 码做多只能表示 256 个符号,每个字符只需要占用 1 个字节。 随着信息技术的发展,各国的文字都需要进行编码,于是相

  • 本文向大家介绍Python中encode()方法的使用简介,包括了Python中encode()方法的使用简介的使用技巧和注意事项,需要的朋友参考一下  encode() 方法返回字符串的编码版本。默认编码是当前的默认字符串编码。可给予设置不同的错误处理机制。 语法 以下是encode()方法的语法: 参数     encoding -- 这是所使用的编码。对于所有的编码方案的列表,请访问:标准编

  • 问题内容: 我正在使用PHP函数imagettftext()将文本转换为GIF图像。我要转换的文本具有Unicode字符,包括日语。在我的本地计算机(Ubuntu 7.10)上一切正常,但是在我的Web主机服务器上,日语字符混乱。是什么引起差异?一切都应编码为UTF-8。 Web主机服务器上的图像损坏:http : //www.ibeni.net/flashcards/imagetest.php

  • 本文向大家介绍Python中的map()函数和reduce()函数的用法,包括了Python中的map()函数和reduce()函数的用法的使用技巧和注意事项,需要的朋友参考一下 Python内建了map()和reduce()函数。 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大

  • 问题内容: 现在,我将elixir与mysql数据库一起使用,并将redispy与redis一起使用,并在所有位置选择UTF-8。我想用中文写一些数据,但是我得到的是这样的: 在我将该字典存储到redis并通过redispy将其取出后,它变为: 我知道如果我加入之前,并打印它会守我,但有一个功能或另一个解决这个问题? 问题答案: 后者看起来像json,请先尝试对其进行解码:

  • 问题内容: 我首先尝试使用python将字符串存储在sqlite中,并得到以下消息: sqlite3.ProgrammingError:除非使用可以解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串。强烈建议您改为将应用程序切换为Unicode字符串。 好的,我切换到Unicode字符串。然后我开始收到消息: sqlite3.Operatio