我在对路径变量进行编码并将其插入到sqlite数据库时遇到问题。我试图用没有帮助的编码("utf-8")函数来解决这个问题。然后我使用了unicode()函数,它给了我unicode类型。

1

2

3

4print type(path) #

path = path.replace("one","two") #

path = path.encode("utf-8") # strange

path = unicode(path) #

最后,我得到了unicode类型,但是我仍然有同样的错误,当路径变量的类型是str时仍然存在。

sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless

you use a text_factory that can interpret 8-bit bytestrings (like

text_factory = str). It is highly recommended that you instead just

switch your application to Unicode strings.

你能帮我解决这个错误并解释一下encode("utf-8")和unicode()函数的正确用法吗?我经常和它打架。

编辑:

此execute()语句引发了错误:

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

我忘了改变fullfilepath变量的编码,它也有同样的问题,但是我现在很困惑。我应该只使用unicode()或encode("utf-8")还是两者都使用?

我不能用

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

因为它引发了这个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position

32: ordinal not in range(128)

python版本是2.7.2

引发错误的代码在哪里?

您的确切问题已经得到了解答:【stackoverflow.com/questions/2392732/…[1]:stackoverflow.com/questions/2392732/…

@我编辑了这个问题。

您是否已将两个使用的变量都转换为unicode?

了解python3如何处理文本和数据,真的帮助我了解了一切。然后很容易将这些知识应用到Python2。

下面是关于python中unicode的精彩演讲幻灯片--link

str是以字节表示的文本,unicode是以字符表示的文本。

将文本从字节解码为Unicode,并使用某些编码将Unicode编码为字节。

即:

1

2

3

4>>> 'abc'.decode('utf-8') # str to unicode

u'abc'

>>> u'abc'.encode('utf-8') # unicode to str

'abc'

谢谢您。非常有用的信息。

回答很清楚,很聪明谢谢

回答得很好,直截了当。我想补充一下,unicode指的是字母或符号,或者更一般地说:runes,而str代表某个编码中的字节字符串,你必须decode(显然是正确的编码)才能得到特定的runes。

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

如果fullFilePath和path当前是str类型,您应该知道它们是如何编码的。例如,如果当前编码是UTF-8,则将使用:

1

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

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

如果这样做不能解决问题,实际的问题可能是您在execute()调用中没有使用unicode字符串,请尝试将其更改为以下内容:

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

这一说法仍然引起了错误。fullfilepath是str和string类型的组合,取自db表的文本列,该列应该是utf-8编码。

根据这一点,它可以是utf-8、utf-16be或utf-16le。我能不知何故找到它吗?

@xralf,如果您组合不同的str对象,则可能是混合编码。你能出示print repr(fullFilePath)的结果吗?

我只能在decode()调用之前显示它。有问题的字符是u0161和u0165。

@xralf-那么它已经是unicode了?尝试将execute调用更改为unicode:cur.execute(u"update docs set path = :fullFilePath where path = :path", locals())。

谢谢。这就解决了它,但我仍然想知道为什么它是Unicode,当我用与路径变量和路径变量str相同的方式组合它时。

我会在你的答案中加上你最后的评论,因为这真的解决了问题。

这条路走错了。

在从shell运行脚本之前,确保已经设置了区域设置,例如

1

2

3

4

5$ locale -a | grep"^en_.\+UTF-8"

en_GB.UTF-8

en_US.UTF-8

$ export LC_ALL=en_GB.UTF-8

$ export LANG=en_GB.UTF-8

文件:man locale、man setlocale。

python encode函数_关于字符串:在python中使用unicode()和encode()函数相关推荐

  1. python绘制反比例函数_怎样在几何画板中画可变的反比例函数

    原标题:怎样在几何画板中画可变的反比例函数 反比例函数是中学时代必学的一种函数,其图像是是双曲线,是用平滑的曲线把一些特殊的点连接起来的,掌握反比例函数的图像是中学数学的重点和难点.作为好用的绘图工具 ...

  2. python中的np.array函数_对列表numpy数组中的每个列表应用函数

    一些比较和时间测试:但请记住,这只是一个小例子.在In [106]: test_arr = np.array([['the', 'quick', 'brown', 'fox'], ['lorem', ...

  3. c语言中memcpy函数_带有示例的C中的memcpy()函数

    c语言中memcpy函数 memcpy()函数 (memcpy() function) memcpy() is a library function, which is declared in the ...

  4. matlab中evrnd函数_【matlab】Matlab中产生正态分布随机数的函数normrnd

    Date: 2018.8.5 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SIGMA,m) R=normrnd(MU,SIGMA,m,n) ...

  5. python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间

    python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间 python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间 python 如何把 utf - 8 字符串写入 ...

  6. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  7. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  8. pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(specific column string length)

    pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(select dataframe rows based on specific colum ...

  9. 为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?

    为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数 构造函数中为什么不能调用虚函数? 第一个理由是概念上的 第二个理由是机械上的. 构造函数不能声明为虚函数的原因是 1 构造 ...

最新文章

  1. Docker的使用(二:Docker客户端常用指令练习)
  2. 分析与设计(AD)简介(2)
  3. 算法 - 折半查找(C#)
  4. python零基础有用吗-零基础参加软件测试有用吗?老男孩Python培训班
  5. freetype-go学习
  6. Molly's Chemicals
  7. 玩转oracle 11g(21):修改为静态监听
  8. 每天进步一点点《SVD学习》
  9. 微课|玩转Python轻松过二级(2.2.2节):关系运算符
  10. 一个字符带下滑线的EditText
  11. php单例模式代码,php设计模式之单例模式代码
  12. led屏背后线路安装图解_弱电工程LED屏安装工程施工方案
  13. 计算机应用专业,报软考应该选什么?
  14. java 字符串替换
  15. (77)--用框架爬取博客园信息并保存到数据库
  16. Leetcode 274 H指数
  17. 什么是数据库?什么是关系数据库?什么是非关系型数据库?
  18. 中文字符点阵信息的显示和插入新字符(基于HZK16 ASC16软字库)
  19. 流星雨html5,HTML5-流星雨
  20. 在cmd命令窗口安装Python模块

热门文章

  1. 需要重新格式化NameNode
  2. 为何需要商业智能BI软件
  3. 大数据安全分析的特征有哪些
  4. 物联网卡网速被限制如何解除
  5. C++算法学习(力扣:1544. 整理字符串)
  6. [ Typescript 手册] JavaScript `Array` 在 Typescript 中的接口
  7. 助创cms众筹 php,【教程】助创cms众筹系统完整测试流程详解
  8. freebsd 安装mysql_Freebsd中mysql安装及使用笔记
  9. python ls_linux 常用shell命令 ls
  10. Linux下7z工具安装