首页 > 编程知识 正文

python中字符串和编码问题(怎么看python的字符串的编码)

时间:2023-12-03 20:09:14 阅读:311909 作者:FQIH

本文目录一览:

  • 1、关于python中字符编码的问题
  • 2、Python 字符集编码 - UTF-8 编码
  • 3、Python编码字符串解码问题,怎么解决
  • 4、python 字符串编码问题
  • 5、python字符串是乱码怎么办
  • 6、Python 源程序编码注意事项?

关于python中字符编码的问题

你说的是,把字符串:

u3232u6674

本身,转换为unicode字符吧?

那么可以通过:

slashUStr = "\u3232\u6674";

decodedUniChars = slashUStr.decode("unicode-escape");

print "decodedUniChars=",decodedUniChars; #decodedUniChars= (有) 晴

注:(有) 是个特殊字符,如果想要在cmd(默认为gbk)中打印,会出错的。

UnicodeEncodeError: 'gbk' codec can't encode character u'u3232' in position 0: illegal multibyte sequence

但是,本身的确已经是转换好了unicode字符串了。

详情可参考:

【整理】Python中,如何将反斜杠u类型(uXXXX)的字符串,转换为对应的unicode的字符

(此处不能贴地址,请用google搜标题,即可找到帖子地址)

Python 字符集编码 - UTF-8 编码

Unicode 的编码范围为 0~0x10FFFF ,如此大的范围,显然没办法像 ASCII 编码一样使用一个字节存储。为此,Unicode 制定了各种储存编码的方式,如: UTF-8 、 UTF-16 和 UTF-32 ,这些存储格式被称为 Unicode 转换格式 UTF 。

每种 Unicode 转换格式都会把一个编码存储为一到多个编码单元,如 UTF-8 的编码单元为 8 位的字节; UTF-16 的编码单元为 16 位,即 2 个字节; UTF-32 的编码单元为 32 位,即 4 个字节。

其中, UTF-8 是在互联网上使用最广泛的一种 Unicode 转换格式,具有以下显著的优势。下面,我们就先来看看 UTF-8 具有哪些有点吧~

1. UTF-8 中每个 ASCII 字符只需要一个字节去存储,因此一个 ASCII 文本本身也是一个 UTF-8 文本,即做到了向后兼容。

比如 A 的 ASCII 码对应为 0x41 , a 的 ASCII 码对应为 0x61 ,那么 UTF-8 兼容 ASCII 也就意味着:

这里,需要再次提醒一下:Unicode 是表现形式,UTF-8 是存储形式;即 UTF-8 解码之后为 Unicode ,Unicode 可以编码成 UTF-8 。

2. UTF-8 采用字节为存储单元,因此不存在字节的大端和小段的问题。

UTF-16 和 UTF-32 的存储单元分别是 2 字节和 4 字节,因此在存储时会涉及到大小端的问题。那什么是大小端模式呢?下面我们来暂停补充一下~

关于如何获知你的环境使用的是大端模式还是小端模式,这里有个简单的方式:定义一个 short 类型的数组即可:

数字 1 在 short 类型中表示为 0x0001 ,高位为 0x00 ,低位为 0x01 。我们可以很直观地看到,数组在保存数据时,将高位 0x00 放在了高地址处,将低位 0x01 放在了低地址处。因此使用的就是小端模式。

那 UTF-8 为什么可以使用字节来作为存储单元,而不用担心字节序的问题呢?这就涉及到了 UTF-8 巧妙的编码规则~

UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则很简单,只有二条:

1)对于单字节符号,字节的第一位设为 0 ,后 7 位为这个符号的 Unicode 码。也就是我们上文提到的向后兼容:对于英文字母,UTF-8 编码和 ASCII 码是相同的。

2)对于使用 X 个字节存储的符号,第一个字节的前 X 位设置为 1 ,第 X+1 位设置为 0 ,后面字节的前 2 位一律设置为 10 ,剩下的位置一次填充这个符号的 Unicode 码。

下表总结了编码规则,字母 x 表示可用于编码的位:

跟据上表,解读 UTF-8 编码也非常简单:如果一个字节的第一位是 0 ,则这个字节单独就是一个字符;如果第一位是 1 ,则连续有多少个 1 ,就表示当前字符占用多少个字节。

下面,我们就来演示一下 UTF-8 编码的过程。

首先,获取汉字 鱼 的 Unicode 码:

我们不妨先对 鱼 这个汉字使用 utf-8 编码看看使用几个字节存储:

鱼 在 UTF-8 编码中使用 3 个字节存储,因此其存储的二进制的形式为 1110xxxx 10xxxxxx 10xxxxxx ,将 Unicode 1001 110001 111100 依次填充到占位符 x 的位置就得到: 11101001 10110001 10111100 。

下面,我们将上述推导得出的 11101001 10110001 10111100 转换为十六进制,验证一下是否为 b'xe9xb1xbc' :

验证无误!

Python编码字符串解码问题,怎么解决

在将字符串写入文件时,执行f.write(str),后台总是报错:UnicodeEncodeError: 'ascii' codec can't encode character u'u6211' in position 0: ordinal not in range(128),即ascii码无法被转换成unicode码。

刚开始我以为Python默认的编码是utf-8,所以使用decode方法和encode方法来进行编码转换,后来怎么也不成功,于是怀疑是否默认编码不是utf-8。

使用下面语句获取python当前的默认编码:

[python] view plain copy

import sys

print sys.getdefaultencoding()

python 字符串编码问题

首先你看下后台是否有异常,是否是因为编码的问题

其次你的key是什么,是Name或者Description么,你可以把Name弄成西班牙语,Desciption写成英文,同时取这两个,看看是否正常

只能这样一点点调试了

如果解决了您的问题请采纳!

如果未解决请继续追问

python字符串是乱码怎么办

显示乱码的主要原因是:字符串编码集问题

其原因详细:

Windows 下的字符串编码集为GBK 而我们的Python字符串一般是 UTF-8

代码详情:

#!/usr/bin/python

# coding: utf-8

os_char='gb18030' # 定义转换类型为GB18030

print u"我是字符串" # 直接打印Unicode

print u"我是字符串".encode(os_char) # 转换为GB18030编码

print "我是字符串".decode("utf-8").encode(os_char) # 先转换为UTF-8 再转换为GB18030

备注:

之前的第一行(#!) 为Linux环境下的执行文件声明 如 Bash 的声明为 #!/bin/bash

第二行注明编码集为GB18030

Linux下的编码集为 UTF-8

Python 源程序编码注意事项?

默认情况下,Python 源文件是 UTF-8 编码。在此编码下,全世界大多数语言的字符可以同时用在字符串、标识符和注释中 — 尽管 Python 标准库仅使用 ASCII 字符作为标识符,这只是任何可移植代码应该遵守的约定。如果要正确的显示所有的字符,你的编辑器必须能识别出文件是 UTF-8 编码,并且它使用的字体能支持文件中所有的字符。

你也可以为源文件制定不同的字符编码。为此,在 #! 行(首行)后插入至少一行特殊的注释行来定义源文件的编码:

# -*- coding: encoding -*-

通过此声明,源文件中所有的东西都会被当作用 encoding 指代的 UTF-8 编码对待。在 Python 库参考手册 codecs 一节中你可以找到一张可用的编码列表。

例如,如果你的编辑器不支持 UTF-8 编码的文件,但支持像 Windows-1252 的其他一些编码,你可以定义:

# -*- coding: cp-1252 -*-

这样就可以在源文件中使用 Windows-1252 字符集中的所有字符了。这个特殊的编码注释必须在文件中的 第一或第二 行定义。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。