python encode函数_关于字符串:在python中使用unicode()和encode()函数
我在对路径变量进行编码并将其插入到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()函数相关推荐
- python绘制反比例函数_怎样在几何画板中画可变的反比例函数
原标题:怎样在几何画板中画可变的反比例函数 反比例函数是中学时代必学的一种函数,其图像是是双曲线,是用平滑的曲线把一些特殊的点连接起来的,掌握反比例函数的图像是中学数学的重点和难点.作为好用的绘图工具 ...
- python中的np.array函数_对列表numpy数组中的每个列表应用函数
一些比较和时间测试:但请记住,这只是一个小例子.在In [106]: test_arr = np.array([['the', 'quick', 'brown', 'fox'], ['lorem', ...
- c语言中memcpy函数_带有示例的C中的memcpy()函数
c语言中memcpy函数 memcpy()函数 (memcpy() function) memcpy() is a library function, which is declared in the ...
- matlab中evrnd函数_【matlab】Matlab中产生正态分布随机数的函数normrnd
Date: 2018.8.5 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SIGMA,m) R=normrnd(MU,SIGMA,m,n) ...
- python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间
python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间 python 如何把 utf - 8 字符串写入文件中_心若止水_百度空间 python 如何把 utf - 8 字符串写入 ...
- python编程基础_月隐学python第2课
python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...
- 查看Python的版本_查看当前安装Python的版本
一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...
- pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(specific column string length)
pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(select dataframe rows based on specific colum ...
- 为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?
为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数 构造函数中为什么不能调用虚函数? 第一个理由是概念上的 第二个理由是机械上的. 构造函数不能声明为虚函数的原因是 1 构造 ...
最新文章
- Docker的使用(二:Docker客户端常用指令练习)
- 分析与设计(AD)简介(2)
- 算法 - 折半查找(C#)
- python零基础有用吗-零基础参加软件测试有用吗?老男孩Python培训班
- freetype-go学习
- Molly's Chemicals
- 玩转oracle 11g(21):修改为静态监听
- 每天进步一点点《SVD学习》
- 微课|玩转Python轻松过二级(2.2.2节):关系运算符
- 一个字符带下滑线的EditText
- php单例模式代码,php设计模式之单例模式代码
- led屏背后线路安装图解_弱电工程LED屏安装工程施工方案
- 计算机应用专业,报软考应该选什么?
- java 字符串替换
- (77)--用框架爬取博客园信息并保存到数据库
- Leetcode 274 H指数
- 什么是数据库?什么是关系数据库?什么是非关系型数据库?
- 中文字符点阵信息的显示和插入新字符(基于HZK16 ASC16软字库)
- 流星雨html5,HTML5-流星雨
- 在cmd命令窗口安装Python模块
热门文章
- 需要重新格式化NameNode
- 为何需要商业智能BI软件
- 大数据安全分析的特征有哪些
- 物联网卡网速被限制如何解除
- C++算法学习(力扣:1544. 整理字符串)
- [ Typescript 手册] JavaScript `Array` 在 Typescript 中的接口
- 助创cms众筹 php,【教程】助创cms众筹系统完整测试流程详解
- freebsd 安装mysql_Freebsd中mysql安装及使用笔记
- python ls_linux 常用shell命令 ls
- Linux下7z工具安装