byte);unicode是对象,才是真正意义上的字符串,由字符组成 >>> a='中文' >>> len(a) 6 >>> repr(a) "'\\xe4\\xb8\\xad\\xe6\\x96\\x87 控制台和脚本 在linux下的python控制台执行以下命令,所得的结果和执行脚本是不同的 >>> a = u'中文' >>> repr(a) "u'\\xe4\\xb8\\xad\\xe6\\x96\\x87 '中文'.decode('ISO-8859-1') 这里的'中文'是控制台理解的,即使根据终端编码方式编码后的字节码,对于utf-8编码的终端,'中文'='\xe4\xb8\xad\xe6\x96\x87 ' >>> a='中文'.decode('ISO-8859-1') >>> repr(a) "u'\\xe4\\xb8\\xad\\xe6\\x96\\x87'" 那如何修改此编码值呢,设置为什么呢? built-in)> >>> sys.setdefaultencoding('utf-8') >>> a = '中文' >>> repr(a) "'\\xe4\\xb8\\xad\\xe6\\x96\\x87
" "的作用是:后面字符串是bytes 类型 话不多说,直接上代码 print("中文".encode(encoding="utf-8")) print(b'\xe4\xb8\xad\xe6\x96\x87 '.decode()) print(r'\xe4\xb8\xad\xe6\x96\x87') 执行结果 b'\xe4\xb8\xad\xe6\x96\x87' 中文 \xe4\xb8\xad\xe6\x96 \x87 可以看到,当你不加 b"" 时,他也就是个普通的字符串而已,不会识别为字节类型 bytes应用场景:像图片、音视频等文件的读写就是用bytes数据 顺便可以看看字符串和bytes之间的转换是怎么样的
BytesIO>>> f = BytesIO()>>> f.write('中文'.encode('utf-8'))6 >>> print(f.getvalue())b'\xe4\xb8\xad\xe6\x96\x87 类似,可以用一个bytes初始化BytesIO,然后,像读文件一样读取:>>> from io import BytesIO>>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87 ')>>> f.read()b'\xe4\xb8\xad\xe6\x96\x87'StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。
. >>> s='中文' >>> s '\xd6\xd0\xce\xc4' >>> s.decode('gbk').encode('utf-8') '\xe4\xb8\xad\xe6\x96\x87' >>> print('\xd6\xd0\xce\xc4') 中文 >>> print('\xe4\xb8\xad\xe6\x96\x87') 涓枃 完整描述下上面乱码出现的过程: 使用指定的脚本文件编码 utf-8 格式读取了「中文」,读取到的字符串内容为 ‘\xe4\xb8\xad\xe6\x96\x87’,然后输出时 Python2.6 的解释器使用默认解释器字符编码 gbk 格式对读取内容进行 coding: utf-8 -*- import sysprint(sys.getdefaultencoding()) print('中文') print('\xe4\xb8\xad\xe6\x96\x87 ('utf-8')) print('中文'.decode('utf-8')) print('\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')) print('\xd6\
. >>> s='中文' >>> s '\xd6\xd0\xce\xc4' >>> s.decode('gbk').encode('utf-8') '\xe4\xb8\xad\xe6\x96\x87' >>> print('\xd6\xd0\xce\xc4') 中文 >>> print('\xe4\xb8\xad\xe6\x96\x87') 涓枃 完整描述下上面乱码出现的过程: 使用指定的脚本文件编码 utf-8 格式读取了「中文」,读取到的字符串内容为 '\xe4\xb8\xad\xe6\x96\x87',然后输出时 Python2.6 的解释器使用默认解释器字符编码 gbk 格式对读取内容进行 coding: utf-8 -*- import sys print(sys.getdefaultencoding()) print('中文') print('\xe4\xb8\xad\xe6\x96\x87 ('utf-8')) print('中文'.decode('utf-8')) print('\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')) print('\xd6\
b'ABC',以Unicode表示的str通过encode()方法可以编码为指定的bytes print('中文'.encode('utf-8')) #输出:b'\xe4\xb8\xad\xe6\x96\x87 ,因为中文字符在ascii编码范围外,所以导致编码失败 解码 print(b'ABC'.decode('ascii')) #输出:'ABC' print(b'\xe4\xb8\xad\xe6\x96\x87 2个字符 print(len('ABC')) #输出:3,共3个字符 print(len(b'ABC')) #输出:3,共是3个字节 print(len(b'\xe4\xb8\xad\xe6\x96\x87
stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87 stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87 stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87 stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87
>> s '中文' >>> type(s) <class 'str'> >>> b = bytes(s, encoding='utf-8') >>> b b'\xe4\xb8\xad\xe6\x96\x87 Python有个内置函数bytes()可以将字符串str类型转换成bytes类型,b实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87 >>> b b'\xe4\xb8\xad\xe6\x96\x87' >>> type(b) <class 'bytes'> >>> s1 = str(b) >>> s1 "b'\\xe4\\xb8\\xad \\xe6\\x96\\x87'" >>> type(s1) <class 'str'> >>> s1 = str(b, encoding='utf-8') >>> s1 '中文' >>> type(s1
>>> u'ABC'.encode('utf-8') 'ABC' >>> u'中文'.encode('utf-8') '\xe4\xb8\xad\xe6\x96\x87 反过来,把UTF-8编码表示的字符串 >>> 'abc'.decode('utf-8') u'abc' >>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') u'\u4e2d\u6587' >>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') 中文 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为
ap-chongqing', 'RegionName': '\xe8\xa5\xbf\xe5\x8d\x97\xe5\x9c\xb0\xe5\x8c\xba(\xe9\x87 'RegionName': '\xe5\x8d\x8e\xe4\xb8\x9c\xe5\x9c\xb0\xe5\x8c\xba(\xe4\xb8\x8a\xe6\xb5\xb7\xe9\x87 'RegionName': '\xe5\x8d\x8e\xe5\x8d\x97\xe5\x9c\xb0\xe5\x8c\xba(\xe6\xb7\xb1\xe5\x9c\xb3\xe9\x87
Order Motion Model for Image Animation》Github项目中所遇到的 OSError: Failed to open file b’C:\\Users\\\xe6\x96\x87 解决方案:修改计算机环境变量中的Temp文件夹路径 TEMP和TMP变量的作用 2022.04.06新增 OSError: Failed to open file b’C:\Users\\xe6\x96\x87
bytes,len()函数就计算字节数 >>> len('ABC') 3 >>> len('中文') 2 >>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87
Order Motion Model for Image Animation》Github项目中所遇到的 OSError: Failed to open file b’C:\\Users\\\xe6\x96\x87 解决方案:修改计算机环境变量中的Temp文件夹路径 TEMP和TMP变量的作用 2022.04.06新增 OSError: Failed to open file b’C:\Users\\xe6\x96\x87
'中文') TypeError: string argument without an encoding >>> bytes('中文','utf-8') b'\xe4\xb8\xad\xe6\x96\x87 ' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' 4.
demo.py 文件存储格式为utf-8,所以中文两个汉字在文件中存储的时候是以 utf-8编码存储的,查看 demo.py 文件 16 进制可以看到中文 存储的是 \xe4\xb8\xad\xe6\x96\x87 代表 GBK 编码,这下我们大概知道什么原因了,demo.py 文件存储和编码声明都是utf-8,但是 cmd 显示编码是 GBK,而将中文的utf-8 编码 \xe4\xb8\xad\xe6\x96\x87 强制转换为 GBK 就会乱码了,GBK 是两个字节存储一个中文字符,所以 \xe4\xb8\xad\xe6\x96\x87 会解码成三个字,很不幸这三个字涓枃不是常用字也不是我们想要的字符,所以就认为是乱码了 GBK 编码存储的,cmd 默认编码是 GBK ,不信看s打印\xd6\xd0\xce\xc4,这就是GBK编码方式存储,而utf-8编码方式存储同样的中文为\xe4\xb8\xad\xe6\x96\x87
事实上这里有几个地方须要注意,首先,我们的sql语句里面的"文件1"原生编码就是终端编码UTF8,也就是'\xe6\x96\x87\xe4\xbb\xb61',而导出数据的语句SELECT * FROM t1 INTO OUTFILE '文件1',依照前面的说法,由于character_set_filesystem为binary,因此'\xe6\x96\x87\xe4\xbb\xb61'不会转换,这样终于还是 '\xe6\x96\x87\xe4\xbb\xb61',这样在zh_CN.UTF8的系统中文件名称不会乱码.而假设我们设置了character_set_filesystem=UTF8,则原生的'\xe6 \x96\x87\xe4\xbb\xb61'会先依照GBK解码,然后用UTF8编码,最后的结果是"\xe9\x8f\x82\xe5\x9b\xa6\xe6\xac\xa21",这样文件名称就会乱码了.所以这个变量也最好不要改动
englishENG中文', encoding='utf8') print(chinese) # bytes可以通过构造函数传入str获得 # b'englishENG\xe4\xb8\xad\xe6\x96\x87 bytearray(chinese) # bytearray没有字面量 print(chinese_arr) # bytearray(b'englishENG\xe4\xb8\xad\xe6\x96\x87
方法可以编码为指定的bytes,例如: >>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87 >>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文' >>> b'\xe4\xb8
\x80H\xaf\xd7\x1b\x0e\x87\xe3\xf14\xcfs \x14\x10\x11H\xb2\xf4\x99\xe7\x9e\x1d\x0c\x06\x87\x87\x87\n\xc1 \x87\x87J\xb2\x01@$dI\xd4\xcd\x92\xf3P\x96\x81\xfb\xdd^\xa7\xd3\x11\x96+;\xbb\x8f\xf3? \x00\xa8I\x80\x06"\xb0/\xcb\xe1p\xf0\xea\xab\xaffY69\x1f\x87\xe0\x1bM2@\x15! \xf7\x1f\x1c|\xf8\xe1\x87\'\'\'[[[W\xaf^\xd7\x14\xbcj\x9ea\xae\xfc\x90/\xe3\xff. f\xde\xdd\xdd\x15\x08\x87\x87\x87\xe0}\x9c$ \xc1\xdad4\xe8\xbd\xf6\xca\xab\x9f\xfd\xcc\xab\x8e\x8c\xb5
decode() 转化为 str >>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87 line 1, in<module> UnicodeEncodeError >>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87 计算字符串的字符数或者 bytes 的字节数 >>> len('ABC') 3 >>> len('中文') 2 >>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x87