当前位置:首页 » 编程语言 » python3unicode

python3unicode

发布时间: 2022-09-03 22:16:51

python3读取unicode文件名的问题

python3默认就是unicode存储。如果是从文件读取的,在open的参数中指定encoding关键字参数就行

❷ 如何理解python3的unicode,以及全角半角转换

1. unicode是一个编码的standard,表明了字符与数字之间的映射,是可变长的。

2. 映射后的数据如何编码为字节?这个就是具体的编码规则:目前最主流的是UTF-8,同样,它也是变字长的。

python3中的str都是unicode的:“The default encoding for Python source code is UTF-8”

python3中的encode:按照encode()括号中的参数对字符串进行编码,就是生成bytes。

所以:

In:'中文'.encode('utf-8')
Out:b'\xe4\xb8\xad\xe6\x96\x87'

这里的b就是Byte,\x表示这个x是被转义的,意思就是0x。又如:

In: 'abc'.encode('utf-8')

Out: b'abc'

上面的b'a'其实表示的是数字97,b'a'的意思就是字符串'a'的binary数字:

[In]:'abc'.encode('utf-8')[0]

[Out]: 97

同时可以把b'\x'进行解码,即:
In:b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
Out:'中文'
除了encode('utf-8')外,用ord可以获得单个utf-8字符对应的数字:

In [60]: ord('a')
Out[60]: 97
In [61]: ord('a')#这个是全角的a
Out[61]: 65345

除了decode('utf-8')外,用chr可以获得数字对应的utf-8字符:

In [62]: chr(97)
Out[62]: 'a'

除了unicode还有别的编码标准吗?有啊,比如我国的GBK,别名也叫cp936。

全角和半角之分,是指同样一个意义的字符,显示的大小不同.具体来说,全角和半角的编码是两个结果:

In [70]: "mn".encode('utf-8')
Out[70]: b'\xef\xbd\x8d\xef\xbd\x8e
[In]:"mn".encode('utf-8')

[Out]:b'mn'

它们有什么对应关系呢?(引自这里)

转换说明
全角半角转换说明
有规律(不含空格):
全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
特例:
空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)
除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 0x7e= 全角),所以可以直接通过用+-法来处理非空格数据,对空格单独处理。
代码在此基础上改动一下(将unichr改为chr即可,适应python3),即:

def strQ2B(ustring):
"""全角转半角"""
rstring = ""
for uchar in ustring:
inside_code=ord(uchar)
if inside_code == 12288: #全角空格直接转换
inside_code = 32
elif (inside_code >= 65281 and inside_code <= 65374): #全角字符(除空格)根据关系转化
inside_code -= 65248
rstring += chr(inside_code)
return rstring

In [69]: strQ2B('你好python')
Out[69]: '你好python'

❸ python3如何把字符串转换成系统默认编码

python 3和2很大区别就是python本身改为默认用unicode编码。
字符串不再区分"abc"和u"abc", 字符串"abc"默认就是unicode,不再代表本地编码、
由于有这种内部编码,像c#和java类似,再没有必要在语言环境内做类似设置编码,比如“sys.setdefaultencoding”;
也因此也python 3的代码和包管理上打破了和2.x的兼容。2.x的扩展包要适应这种情况改写。
另一个问题是语言环境内只有unicode怎么输出gbk之类的本地编码。
答按惯例都在(序列化)输出时才转换成本地编码。
比如

1

file.write("GBK的中文".encode("GBK"))

python环境内字符串用str.encode("GBK")方法输出成字节串用于和其他环境交流。

❹ python 3中使用Unicode字符串操作符u的结果为什么是这样的

Unicode是一种字符编码,它把各种语言的符号,编排起来,用一个数字表示。
每一种语言的符号都大致有一个区间,比如:
4E00~9FA5这个区间是“中日韩统一表意文字”
输入u'\u4e00'可以发现这个字是“一”,u'\u4e01'是“丁”
查询网络可以知道u'\u1234'这个字符所在埃塞俄比亚文字这个区间。

❺ python3 pickle中怎么使用unicode编码

Python特有编码
Python还内置一些特有的编码集。
4.2.4.1 文本编码
Python提供了下面从字符串到字节数组的编码,以及字节数据到字符串的解码:

Codec

Aliases

Purpose

idna

Implements RFC 3490, see also encodings.idna. Only errors='strict' is supported.

mbcs

dbcs

Windows only: Encode operand according to the ANSI codepage (CP_ACP)

palmos

Encoding of PalmOS 3.5

punycode

Implements RFC 3492. Stateful codecs are not supported.

raw_unicode_escape

Latin-1 encoding with \uXXXX and \UXXXXXXXX for other code points. Existing backslashes are not escaped in any way. It is used in the Python pickle protocol.

undefined

Raise an exception for all conversions, even empty strings. The error handler is ignored.

unicode_escape

Encoding suitable as the contents of a Unicode literal in ASCII-encoded Python source code, except that quotes are not escaped. Decodes from Latin-1 source code. Beware that Python source code actually uses UTF-8 by default.

unicode_internal

Return the internal representation of the operand. Stateful codecs are not supported.
Deprecated since version 3.3: This representation is obsoleted by PEP 393

4.2.4.2 二进制编码转换
Python提供下面的二进制编码转换:字节对象到字节对象映射转换,不支持使用bytes.decode()。

Codec

Aliases

Purpose

Encoder / decoder

base64_codec [1]

base64, base_64

Convert operand to MIME base64 (the result always includes a trailing '\n')
Changed in version 3.4: accepts any bytes-like object as input for encoding and decoding

base64.b64encode() / base64.b64decode()

bz2_codec

bz2

Compress the operand using bz2

bz2.compress() / bz2.decompress()

hex_codec

hex

Convert operand to hexadecimal representation, with two digits per byte

base64.b16encode() / base64.b16decode()

quopri_codec

quopri, quotedprintable, quoted_printable

Convert operand to MIME quoted printable

quopri.encodestring() / quopri.decodestring()

uu_codec

uu

Convert the operand using uuencode

uu.encode() / uu.decode()

zlib_codec

zip, zlib

Compress the operand using gzip

zlib.compress() / zlib.decompress()

4.2.4.3 文本编码转换

下面编解码器支持字符串到字符串的转换:

Codec

Aliases

Purpose

rot_13

rot13

Returns the Caesar-cypher encryption of the operand

4.2.5 encodings.idna--国际化域名的应用
本模块实现了RFC 3490(Internationalized Domain Names in Applications)和RFC 3492(Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN) 的功能。它实现的功能建立在punycode编码和stringprep模块之上。
这两个RFC定义了非ASCII字符表示域名的规范。如果一个域名含有非ASCII字符,需要把它转换为ASCII兼容编码的域名(ACE),因为有一些网络协议不支持非ASCII字符的域名,比如DNS查询、HTTP主机等等。因此这些转换工作可以人工转换,也可以是程序转换。在程序里转换,需要把UNICODE的域名转换为ACE兼容的域名之后,才能进行处理,当要给用户显示时需要从ACE反向转换为UNICODE域名。

Python提供了好几种方法来做转换的工作:使用idna编解码来操作UNICODE与ACE之间相互转换;把输入字符串分离成标记,然后通过RFC3490进行查表,再合并成相应的域名;最后一种是把输入字符串分成标记,通过ACE标记转换。在socket模块里,就透明地实现了从UNICODE主机名称转换为ACE域名,所以应用程序在调用这个模块时就不需要考虑UNICODE域名转换为ACE域名的工作了。基于socket模块之上的功能,比如http.client和ftplib都可以接受UNICODE域名。

当从网络收到的域名,它是不会自动转换为 UNICODE域名的,需要应用程序进行转换之后,才能以UNICODE域名显示给用户。

模块encodings.idna也实现nameprep的处理,它能实现主机名称的标准化处理,域名的大小写统一化,如果需要这些功能是可以直接使用。

encodings.idna.nameprep(label)
返回label的国际化标志名称。

encodings.idna.ToASCII(label)
转换label为ASCII表示,符合标准RFC 3490。

encodings.idna.ToUnicode(label)
转换label为UNICODE表示,符合标准RFC 3490.
4.2.6 encodings.mbcs--Windows的ANSI编码
本模块实现从ANSI(CP_ACP)代码进行编码的功能。仅在Windows系统上可用。

4.2.7 encodings.utf_8_sig-UTF-8带BOM标记的codec编码
本模块实现UTF-8的编码和解码:把带有BOM的UTF-8编码转换为不带BOM的UTF-8编码。当在生成BOM时,只在第一次时生成;当在解码时跳过相应的BOM标记字节,再进行解码。

❻ python3.3里面,怎么将汉字存成unicode文本

python2

unicode("文字")
python3,直接输入字符串就是unicode

❼ python中怎样将unicode转换成原来的中文

python默认就是unicode存储。如果是从文件读取的,在open的参数中指定encoding关键字参数就行。如下:

#coding=utf-8/importjson /defLoadQuestion(): /f=open("test.json",'r') qas=json.load(f) question=qas['documents'] /returnquestion/t=LoadQuestion() /printstr(t).decode("unicode-escape")

拓展资料:

通常python2时所有IO读写都是byte方式。也就是编码后的。java也是这样子。只有python3还有某些特定的模块才会自动将byte重新转换成unicode

在python2里的确可以使用s.decode('gbk','ignore')之类的变成unicode。不过在python3里应该是这样子, s.encode('gbk','ignore')这样就变成了byte

如果你喜欢 utf-8,可以s.encode(‘utf-8','ignore')和s.decode(‘utf-8','ignore')

❽ python3 有 unicode吗

有的,python3的编码方式默认就是unicode
你可以直接encode其他任何编码方式

❾ Python2和3中关于str和unicode以及UTF-8的更改到底是什么意思

Python2.x中:

str格式本质含义是“某种编码格式”,绝大多数情况下,被引号框起来的字符串,就是str,这时的字符串编码类型,其实就是你Python文件的编码类型,比如在Windows里,默认用的是GBK编码。

Unicode格式的含义就是“用unicode编码的字符串”。Python在进入2.0版后正式定义了了Unicode字符串这个奇怪的特性,目的就是为了处理太多种语言编码的文本。从那时开始,Python语言中的字符串类型就分为两种:一种是传统的Python字符串(各种花样编码),另一种则是新出现的Unicode。

后来到了Python3.x时代:

str格式的定义变更为”Unicode类型的字符串“,也就是说在默认情况下,被引号框起来的字符串,是使用Unicode编码的。
而“不是Unicode的某种编码格式”,比如UTF-8、GBK,这些编码方式被定义为了bytes,这里的bytes和py2中的str有很多相似的地方。

热点内容
android文件图片 发布:2025-01-15 17:39:44 浏览:205
linux的路径怎么写 发布:2025-01-15 17:18:49 浏览:185
php解压程序 发布:2025-01-15 17:06:22 浏览:142
刷助力脚本 发布:2025-01-15 17:02:31 浏览:520
c盘里的用户文件夹可以删除 发布:2025-01-15 16:56:45 浏览:951
虚幻4编译到哪里 发布:2025-01-15 16:50:19 浏览:756
透明度渐变android 发布:2025-01-15 16:45:08 浏览:835
dos连接oracle数据库 发布:2025-01-15 16:41:39 浏览:906
网络配置比较低怎么做 发布:2025-01-15 16:35:38 浏览:362
android弹出键盘监听 发布:2025-01-15 16:35:11 浏览:208