Unicode对象和编解码器 – 具体对象层(Python教程)(参考资料)
Unicode对象和编解码器
Unicode对象
自执行 PEP 393 在Python 3.3中,Unicode对象在内部使用各种表示,以便在保持内存效率的同时处理完整范围的Unicode字符。字符串有特殊情况,所有代码点都低于128,256或65536;否则,代码点必须低于1114112(这是完整的Unicode范围).
Py_UNICODE*
和UTF-8表示按需创建并在Unicode对象中缓存。Py_UNICODE*
表示被弃用且效率低下;在性能或记忆敏感的情况下应该避免它.
由于旧API和新API之间的转换,unicode对象可以在内部处于两种状态,具体取决于它们的创建方式:
- “规范”unicode对象是由非deprecatedunicode API创建的所有对象。他们使用实现所允许的最有效的表示.
- “遗留”unicode对象是通过其中一个已弃用的API(通常为
PyUnicode_FromUnicode()
)创建的,只承载Py_UNICODE*
表示;你将不得不打电话PyUnicode_READY()
在调用任何其他API之前对它们进行操作.
Unicode类型
这些是用于Python实现的Unicode实现的基本Unicode对象类型:
Py_UCS4
Py_UCS2
Py_UCS1
- 这些类型是无符号整数类型的typedef,其宽度足以分别包含32位,16位和8位的字符。处理单个Unicode字符时,使用
Py_UCS4
.3.3版本中的新功能
Py_UNICODE
- 这是
wchar_t
,这是一个16位型或32位型,取决于平台.改版3.3:在以前的版本中,这是一个16位类型或32位类型,这取决于您是否在构建时选择了“窄”或“宽”的Unicode版本的Python .
PyASCIIObject
PyCompactUnicodeObject
PyUnicodeObject
- 的这些子类型
PyObject
表示Python Unicode对象。几乎在所有情况下,它们都不应该直接使用,因为处理Unicode对象的所有API函数都接受并返回PyObject
指针新版本3.3.
- PyTypeObject
PyUnicode_Type
PyTypeObject
的这个实例表示Python Unicode类型。它暴露于Python代码str
.
以下API实际上是C宏,可用于快速检查和访问Unicode对象的内部只读数据:
- int
PyUnicode_Check
( PyObject *o) - 如果对象o是Unicode对象或Unicodesubtype的实例,则返回true
- //int
PyUnicode_CheckExact
( PyObject *o) - 如果对象o是Unicode对象,但不是asubtype的实例,则返回true.
- int
PyUnicode_READY
( PyObject *o) - 确保字符串对象o在“规范”中“代表。这是在使用下面描述的任何访问宏之前需要的.
回复
0
成功和-1
失败时设置异常,如果内存分配失败则会发生特殊情况.版本3.3.
- Py_ssize_t
PyUnicode_GET_LENGTH
( PyObject *o) - 在代码点中返回Unicode字符串的长度。o必须是“规范”表示中的aUnicode对象(未选中).
版本3.3.
- Py_UCS1*
PyUnicode_1BYTE_DATA
( PyObject *o) - Py_UCS2 *
PyUnicode_2BYTE_DATA
( PyObject *o) - Py_UCS4 *
PyUnicode_4BYTE_DATA
( PyObject *o) - 返回指向UCS1,UCS2或UCS4integer类型的规范表示的指针,以便直接进行字符访问。如果规范表示具有正确的字符大小,则不执行检查;使用
PyUnicode_KIND()
选择正确的宏。确保PyUnicode_READY()
在访问之前已被调用.新版本3.3.
PyUnicode_WCHAR_KIND
PyUnicode_1BYTE_KIND
PyUnicode_2BYTE_KIND
PyUnicode_4BYTE_KIND
- 返回
PyUnicode_KIND()
宏的值3.3版本中的新功能
- //
PyUnicode_KIND
( PyObject *o) - 返回一个PyUnicode类常量(见上文),指示此Unicode对象用于存储其数据的每个字符的字节数。o必须是“规范”表示中的Unicode对象(未选中).
版本3.3.
- void*
PyUnicode_DATA
( PyObject *o) - 返回一个指向原始unicode缓冲区的void指针。o必须是“规范”表示中的Unicode对象(未选中).
版本3.3.
- void
PyUnicode_WRITE
( int kind,void *data,Py_ssize_t index,Py_UCS4 value) - 写成规范的陈述data(用
PyUnicode_DATA()
获得)此宏不进行任何健全性检查,并且用于循环使用。调用者应该缓存从其他宏调用获得的kind值和data指针。index是字符串中的索引(从0开始)和value是应该写入该位置的新代码点值.新版本3.3.
- Py_UCS4
PyUnicode_READ
( int kind,void *data,Py_ssize_t index) - 从规范表示data读取代码点(用
PyUnicode_DATA()
获得)。没有检查或就绪电话.新版本3.3.
- Py_UCS4
PyUnicode_READ_CHAR
( PyObject *o,Py_ssize_t index) - 从Unicode对象o读取一个字符,该字符必须是“规范”表示。如果连续多次读取,这比
PyUnicode_READ()
效率低3.3版本中的新功能
PyUnicode_MAX_CHAR_VALUE
(的PyObject *o)- 返回适合于创建另一个基于o,必须采用“规范”表示。这总是近似但比在字符串上迭代更有效.
新版本3.3.
- int
PyUnicode_ClearFreeList
() - 清除免费列表。返回已释放物品的总数.
- Py_ssize_t
PyUnicode_GET_SIZE
(的PyObject *o) - 返回已弃用的
Py_UNICODE
表示,incode单位(这包括代理对作为2个单位)。o必须是aUnicode对象(未选中).从版本3.3开始不推荐使用,将在版本4.0中删除:部分旧式Unicode API,请迁移到使用
PyUnicode_GET_LENGTH()
.
- Py_ssize_t
PyUnicode_GET_DATA_SIZE
( PyObject *o) - 返回已弃用的
Py_UNICODE
表示inbytes的大小。o必须是一个Unicode对象(未选中).从版本3.3开始不推荐使用,将在版本4.0中删除:部分旧式Unicode API,请迁移到使用
PyUnicode_GET_LENGTH()
.
- Py_UNICODE *
PyUnicode_AS_UNICODE
( PyObject *o) - const char *
PyUnicode_AS_DATA
( PyObject *o) - 返回一个指向
Py_UNICODE
对象表示的指针。总是使用额外的空代码点终止缓冲区。它也可能包含嵌入的空代码点,这会导致在大多数C函数中使用时字符串被截断。AS_DATA
表格指向const char *
。o参数必须是Unicode对象(未检查).在版本3.3中更改:这个宏现在效率低 – 因为在很多情况下
Py_UNICODE
表示不存在,需要创建 – 并且可能失败(返回NULL并设置异常)。尝试移植代码以使用新的PyUnicode_nBYTE_DATA()
宏或使用PyUnicode_WRITE()
或PyUnicode_READ()
.从版本3.3开始不推荐使用,将在版本4.0中删除:部分旧式Unicode API,请迁移到使用
PyUnicode_nBYTE_DATA()
系列宏.
Unicode字符属性
Unicode提供了许多不同的字符属性。最经常需要的那些可以通过这些宏来获得,这些宏根据Python配置映射到C函数.
- int
Py_UNICODE_ISSPACE
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为空白字符.
- int
Py_UNICODE_ISLOWER
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为小写字符.
- int
Py_UNICODE_ISUPPER
( Py_UNICODE ch) - 返回
1
或0
取决于是否ch是一个大写的字符.
- int
Py_UNICODE_ISTITLE
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否是一个标题字符
- int
Py_UNICODE_ISLINEBREAK
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为换行符
- int
Py_UNICODE_ISDECIMAL
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为十进制字符.
- int
Py_UNICODE_ISDIGIT
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为数字字符。
- int
Py_UNICODE_ISNUMERIC
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为数字字符
- int
Py_UNICODE_ISALPHA
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否是字母字符.
- int
Py_UNICODE_ISALNUM
( Py_UNICODE ch) - 返回
1
或0
取决于ch是否为字母数字字符.
- int
Py_UNICODE_ISPRINTABLE
( Py_UNICODE ch) - 根据是否
1
返回0
或ch是一个可打印的字符。不可打印的字符是Unicode字符数据库中定义为“其他”或“分隔符”的字符,但ASCII空格(0x20)除外,它被认为是可打印的。(请注意,此上下文中的可打印字符是repr()
在字符串上调用。它与写入sys.stdout
或sys.stderr
的字符串的处理没有关系.
这些API可用于快速直接字符转换:
- Py_UNICODE
Py_UNICODE_TOLOWER
(Py_UNICODE ch) - 返回字符ch转换为小写字母.
自版本3.3以后删除:此函数使用简单的大小写mappings.
- Py_UNICODE
Py_UNICODE_TOUPPER
( Py_UNICODE ch) - 返回字符ch转换为大写字母.
自版本3.3以后删除:此函数使用简单的大小写映射.
- Py_UNICODE
Py_UNICODE_TOTITLE
( Py_UNICODE ch) - 返回字符ch转换为标题case
//自版本3.3以后删除:此函数使用简单的大小写映射.
- int
Py_UNICODE_TODECIMAL
( Py_UNICODE ch) - 返回ch转换为十进制正整数的字符。如果不可能,请返回
-1
。这个宏不会引发异常.
- int
Py_UNICODE_TODIGIT
( Py_UNICODE ch) - 返回ch转换为单个数字整数的字符。如果这是不可能的话,请返回
-1
这个宏不会引发异常.
- double
Py_UNICODE_TONUMERIC
( Py_UNICODE ch) - 返回角色ch转换成双倍。返回
-1.0
如果这是不可能的。这个宏不会引起异常.
这些API可用于代理:
Py_UNICODE_IS_SURROGATE
(CH )- 检查ch是否是代理人(
0xD800 <= ch <= 0xDFFF
).
Py_UNICODE_IS_HIGH_SURROGATE
(ch)- 检查ch是否是高代理(
0xD800 <= ch <= 0xDBFF
).
Py_UNICODE_IS_LOW_SURROGATE
(ch)- 检查ch是否是低代理(
0xDC00 <= ch <= 0xDFFF
).
Py_UNICODE_JOIN_SURROGATES
(高,低)- 加入两个代理字符并返回单个Py_UCS4值.high和low分别是asurrogate对中的前导和尾随代理.
创建和访问Unicode字符串
要创建Unicode对象并访问它们的基本序列属性,请使用以下API:
- PyObject *
PyUnicode_New
( Py_ssize_t size,Py_UCS4 maxchar) - Return value: New reference.
创建一个新的Unicode对象。maxchar应该是放在字符串中的真正的最大代码点。作为近似值,它可以向上舍入到序列127,255,65535,1114111中的最近值.
这是分配新Unicode对象的推荐方法。使用此功能创建的对象不可调整大小.
版本3.3.
- PyObject*
PyUnicode_FromKindAndData
( int kind,const void *buffer,Py_ssize_t size) - Return value: New reference.
使用给定的kind(可能的值是
PyUnicode_1BYTE_KIND
等,由PyUnicode_KIND()
)。buffer必须指向一个size每个字符单位为1,2或4个字节,由种类给出.新版本3.3.
- PyObject*
PyUnicode_FromStringAndSize
( constchar *u,Py_ssize_t size) - Return value: New reference.
从char缓冲区u创建一个Unicode对象。字节将被解释为UTF-8编码。缓冲区被复制到newobject中。如果缓冲区不是NULL,则返回值可能是共享对象,即不允许修改数据.
如果u是NULL,此函数的行为类似于
PyUnicode_FromUnicode()
,缓冲区设置为NULL。这个用法不赞成使用PyUnicode_New()
.
- PyObject *
PyUnicode_FromString
( const char *u) - Return value: New reference.
从UTF创建一个Unicode对象-8编码的以null结尾的char缓冲区u.
- PyObject *
PyUnicode_FromFormat
( const char *format, …) - Return value: New reference.
取一个C
printf()
– 样式format字符串和可变数量的参数,计算生成的Python unicode字符串的大小,并返回格式化为其值的returna字符串。变量参数必须是Ctypes,并且必须与format ASCII编码字符串中的格式字符完全对应。允许使用以下格式字符:格式字符 键入 注释 %%
n/a 文字%字符 %c
int 单个字符,表示为C int. %d
int 等于 printf("%d")
。[1]%u
unsigned int 相当于 printf("%u")
。[1]%ld
长 相当于 printf("%ld")
。[1]%li
长 相当于 printf("%li")
。[1]%lu
unsigned long 相当于 printf("%lu")
。[1]%lld
很长 相当于 printf("%lld")
。[1]%lli
很长 相当于 printf("%lli")
。[1]%llu
unsigned long long 相当于 printf("%llu")
。[1]%zd
Py_ssize_t 相当于 printf("%zd")
。[1]%zi
Py_ssize_t 相当于 printf("%zi")
。[1]%zu
size_t 相当于 printf("%zu")
。[1]%i
int 相当于 printf("%i")
。[1]%x
int 相当于 printf("%x")
。[1]%s
const char * 以null结尾的C characterarray. %p
const void * Cpointer的十六进制表示。大部分相当于 printf("%p")
除了保证以字面0x
开头,无论平台的printf
yields.%A
PyObject* 调用的结果 ascii()
.%U
PyObject * 一个unicode对象. %V
PyObject *,const char * 一个unicode对象(可能是NULL)和一个null-terminatedC字符数组作为第二个参数(如果第一个参数是NULL,将使用它. %S
PyObject * 调用的结果 PyObject_Str()
.%R
PyObject * 调用 PyObject_Repr()
.一个无法识别的格式字符导致格式字符串的所有其余部分按原样被复制到结果字符串,并且丢弃了任何额外的参数.
注意
宽度格式化单位是字符数而不是字节数。精度格式化单位是
"%s"
和"%V"
的字节数(如果PyObject*
参数为NULL),"%A"
,"%U"
,"%S"
,"%R"
和"%V"
(如果PyObject*
参数不是NULL).[1] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)对于整数说明符(d,u,ld,li,lu,lld,lli,llu,zd,zi,zu,i,x):即使给出精度,0转换标志也会生效. 更改版本3.2:支持
"%lld"
和"%llu"
添加。改版3.3:支持
"%li"
,"%lli"
和"%zi"
添加。版本3.4更改:支持
"%s"
,"%A"
,"%U"
,"%V"
,"%S"
,"%R"
添加。
- PyObject *
PyUnicode_FromFormatV
(const char *format,va_list vargs) - Return value: New reference.
与
PyUnicode_FromFormat()
完全相同,只需要两个参数.
- PyObject*
PyUnicode_FromEncodedObject
( PyObject *obj,const char *encoding,const char *errors) - Return value: New reference.
解码编码对象obj到一个Unicode对象.
bytes
,bytearray
和别的字节对象根据给定的解码encoding并使用errors。两者都可以NULL让接口使用defaultvalues(详见内置编解码器).所有其他对象,包括Unicode对象,导致
TypeError
beset.API返回NULL如果有错误。调用者负责拆除返回的对象.
- Py_ssize_t
PyUnicode_GetLength
( PyObject *unicode) - 返回的长度Unicode对象,代码点
版本3.3中的新功能
- Py_ssize_t
PyUnicode_CopyCharacters
( PyObject *to,Py_ssize_t to_start,PyObject *from,Py_ssize_t from_start,Py_ssize_t how_many) - 将字符从一个Unicode对象复制到另一个Unicode对象。此功能在必要时执行字符转换,并且如果可能则回退到
memcpy()
。返回-1
并在出错时设置异常,否则返回复制字符数.新版本3.3.
- Py_ssize_t
PyUnicode_Fill
( PyObject *unicode,Py_ssize_t start,Py_ssize_t length,Py_UCS4 fill_char) - 用字符填充字符串:写fill_char进入
unicode[start:start+length]
.如果fill_char大于字符串最大字符,或者如果字符串超过1个引用,则失败.
返回写入字符的数量,或者返回
-1
并在出错时引发异常.新版本3.3.
- int
PyUnicode_WriteChar
( PyObject *unicode,Py_ssize_t index,Py_UCS4 character) - 在字符串中写一个字符。该字符串必须是通过
PyUnicode_New()
创建的。因为Unicode字符串应该是不可变的,所以字符串不能被共享,或者已经被哈希化了这个函数检查unicode是一个Unicode对象,索引不会超出范围,并且可以安全地修改对象(即引用计数是一个).
版本3.3中的新内容.
- Py_UCS4
PyUnicode_ReadChar
( PyObject *unicode,Py_ssize_t index) - 从字符串中读取一个字符。此函数检查unicode是aUnicode对象并且索引不是超出界限,与版本3.3中的宏转换
PyUnicode_READ_CHAR()
.新建相反.
- PyObject*
PyUnicode_Substring
( PyObject *str,Py_ssize_t start,Py_ssize_t end) - Return value: New reference.
返回str的子字符串,从字符索引start(包括)tocharacter index end(除外)。不支持负指数.
版本3.3.
- Py_UCS4 *
PyUnicode_AsUCS4
( PyObject *u,Py_UCS4 *buffer,Py_ssize_t buflen,int copy_null) - 将字符串u复制到UCS4缓冲区中,包括空字符,如果copy_null已设置。返回NULL并在出错时设置异常(特别是
SystemError
如果buflen小于u的长度)。buffer成功归还新的版本3.3.
- Py_UCS4*
PyUnicode_AsUCS4Copy
( PyObject *u) - 复制字符串u到使用
PyMem_Malloc()
。如果失败了,NULL用MemoryError
组。返回的缓冲区总是附加一个外部代码点3.3版本中的新功能
不推荐使用的Py_UNICODE API
从版本3.3开始不推荐使用,将在4.0版中删除.
执行PEP 393 .Extension模块可以继续使用它们,因为它们不会在Python3.x中删除,但需要注意它们的使用现在可以导致性能和内存命中.
- PyObject*
PyUnicode_FromUnicode
(const Py_UNICODE *u,Py_ssize_t size) - Return value: New reference.
从给定大小的Py_UNICODE缓冲区u创建一个Unicode对象。u也许 NULL这导致内容未定义。用户有责任填写所需数据。缓冲区被复制到newobject.
如果缓冲区不是NULL,返回值可能是一个共享对象。因此,仅当u是NULL.
时才允许修改生成的Unicode对象。如果缓冲区是NULL,
PyUnicode_READY()
必须在字符串后调用在使用任何访问宏之前已经填充了内容,例如PyUnicode_KIND()
.请迁移到使用
PyUnicode_FromKindAndData()
,PyUnicode_FromWideChar()
或PyUnicode_New()
.
- Py_UNICODE *
PyUnicode_AsUnicode
( PyObject *unicode) - 返回一个只读指向Unicode对象的内部
Py_UNICODE
缓冲区,或NULL出错。如果对象尚不可用,这将创建对象的Py_UNICODE*
表示。缓冲区总是以一个额外的空代码点终止。注意结果Py_UNICODE
字符串也可能包含嵌入空代码点,这会导致在大多数C函数中使用时字符串被截断.请迁移到使用
PyUnicode_AsUCS4()
,PyUnicode_AsWideChar()
,PyUnicode_ReadChar()
或类似的newAPIs.
- PyObject*
PyUnicode_TransformDecimalToASCII
( Py_UNICODE *s,Py_ssize_t size) - Return value: New reference.
通过替换给定
Py_UNICODE
的size按ASCII数字0-9按照其十进制值。返回NULL如果发生异常.
- Py_UNICODE *
PyUnicode_AsUnicodeAndSize
(的PyObject *unicode,Py_ssize_t *size) - 喜欢
PyUnicode_AsUnicode()
,还要保存Py_UNICODE()
中的数组长度(不包括额外的空终止符)size。注意结果Py_UNICODE*
stringmay包含嵌入的空代码点,当在大多数C函数中使用时会导致字符串被截断.版本3.3.
- Py_UNICODE*
PyUnicode_AsUnicodeCopy
(的PyObject *unicode) - 创建以空代码点结尾的Unicode字符串的副本。返回NULL并在内存分配失败时引发
MemoryError
异常,否则返回一个新分配的缓冲区(使用PyMem_Free()
到freethe缓冲区)。请注意,生成的Py_UNICODE*
字符串可能包含嵌入的空代码点,这会导致字符串在大多数C函数中使用时被截断.新版本3.2.
请迁移到使用
PyUnicode_AsUCS4Copy()
或类似的新API .
- Py_ssize_t
PyUnicode_GetSize
( PyObject *unicode) - 返回被弃用的大小
Py_UNICODE
表示,incode单位(这包括代理对作为2个单位).请迁移到使用
PyUnicode_GetLength()
.
- PyObject *
PyUnicode_FromObject
( PyObject *obj) - Return value: New reference.
如有必要,将Unicode子类型的实例复制到新的真正Unicode对象。如果obj已经是一个真正的Unicode对象(不是子类型),则使用递增的refcount.
除Unicode或其子类型以外的对象将导致
TypeError
.
语言环境编码
当前语言环境编码可用于解码操作系统中的文本.
- PyObject*
PyUnicode_DecodeLocaleAndSize
(const char *str,Py_ssize_t len,const char *errors) - Return value: New reference.
在Android上解码UTF-8中的字符串,或从其他平台上的当前语言环境解码。支持处理程序是
"strict"
和"surrogateescape"
(PEP 383 )。解码器使用"strict"
错误处理程序如果errors是NULL
. str必须以空字符结尾但不能包含嵌入的空字符.使用
PyUnicode_DecodeFSDefaultAndSize()
从解码一个字符串Py_FileSystemDefaultEncoding
(locale编码读取atPython启动).此函数忽略了Python UTF-8模式.
也可以看看
Py_DecodeLocale()
功能。3.3版本中的新功能
更改版本3.7:该函数现在还使用
surrogateescape
错误处理程序的当前语言环境编码,Android上除外。以前,Py_DecodeLocale()
用于surrogateescape
,当前的语言环境编码用于strict
.
- PyObject *
PyUnicode_DecodeLocale
( const char *str,const char *errors) - Return value: New reference.
类似于
PyUnicode_DecodeLocaleAndSize()
,但是计算stringlength使用strlen()
.版本3.3.
- PyObject*
PyUnicode_EncodeLocale
( PyObject *unicode,const char *errors) - Return value: New reference.
在Android上将Unicode对象编码为UTF-8,或在其他平台上编码当前的localeencoding。支持的错误处理程序是
"strict"
和"surrogateescape"
( PEP 383 )。编码器使用"strict"
错误处理程序,如果errors是NULL
。返回bytes
对象。unicode无法包含嵌入的空字符.使用
PyUnicode_EncodeFSDefault()
将字符串编码为Py_FileSystemDefaultEncoding
(语言环境编码读取atPython启动时).此函数忽略了Python UTF-8模式.
也可以看看
Py_EncodeLocale()
功能。3.3版本中的新功能
更改版本3.7:该函数现在还使用
surrogateescape
错误处理程序的当前语言环境编码,Android上除外。以前,Py_EncodeLocale()
用于surrogateescape
,当前的语言环境编码用于strict
.
文件系统编码
要编码和解码文件名和其他环境字符串,Py_FileSystemDefaultEncoding
应该用作编码,Py_FileSystemDefaultEncodeErrors
应该用作错误处理程序(PEP 383 和PEP 529 )。要将文件名编码为bytes
在分析过程中,应该使用"O&"
转换器,传递PyUnicode_FSConverter()
作为转换函数:
- int
PyUnicode_FSConverter
( PyObject * obj,void * result) - ParseTuple转换器:编码
str
对象 – 直接通过os.PathLike
接口获得 – 使用bytes
到PyUnicode_EncodeFSDefault()
;bytes
对象输出as-is.result必须是PyBytesObject*
必须在不再使用时释放.3.1版本中的新版
在版本3.6中更改:接受路径对象.
将文件名解码为str
在参数解析过程中,应该使用"O&"
转换器,传递PyUnicode_FSDecoder()
作为转换函数:
- int
PyUnicode_FSDecoder
( PyObject * obj,void * result) - ParseTuple转换器:解码
bytes
对象 – 通过os.PathLike
接口直接或间接获得 – 使用str
到PyUnicode_DecodeFSDefaultAndSize()
;str
对象按原样输出。result必须是PyUnicodeObject*
必须在不再使用的时候发布.新版本3.2.
更改版本3.6:接受路径状物体.
- PyObject *
PyUnicode_DecodeFSDefaultAndSize
( const char *s,Py_ssize_t size) - Return value: New reference.
使用
Py_FileSystemDefaultEncoding
和Py_FileSystemDefaultEncodeErrors
错误处理程序解码一个字符串如果没有设置
Py_FileSystemDefaultEncoding
,则回退到编码.Py_FileSystemDefaultEncoding
在初始化时从thelocale编码初始化,以后不能修改。如果你需要解码当前语言环境编码的字符串,请使用PyUnicode_DecodeLocaleAndSize()
.参见
Py_DecodeLocale()
功能更改版本3.6:使用
Py_FileSystemDefaultEncodeErrors
错误处理程序
- PyObject*
PyUnicode_DecodeFSDefault
( const char *s) - Return value: New reference.
使用
Py_FileSystemDefaultEncoding
和Py_FileSystemDefaultEncodeErrors
错误处理程序解码一个以null结尾的字符串.如果
Py_FileSystemDefaultEncoding
没有设置,回到thelocale编码.使用
PyUnicode_DecodeFSDefaultAndSize()
如果你知道字符串长度版本3.6更改:使用
Py_FileSystemDefaultEncodeErrors
错误处理程序
- PyObject *
PyUnicode_EncodeFSDefault
(的PyObject *unicode) - Return value: New reference.
使用
Py_FileSystemDefaultEncoding
错误处理程序将Unicode对象编码为Py_FileSystemDefaultEncodeErrors
,然后返回bytes
。请注意,生成的bytes
对象可能包含空字节如果
Py_FileSystemDefaultEncoding
没有设置,回退到thelocale编码.Py_FileSystemDefaultEncoding
在启动时从thelocale编码初始化,以后不能修改。如果需要将字符串编码为当前的语言环境编码,请使用PyUnicode_EncodeLocale()
.另见
Py_EncodeLocale()
功能新版本3.2.
更改版本3.6:使用
Py_FileSystemDefaultEncodeErrors
错误处理程序
wchar_t支持
wchar_t
支持支持它的平台:
- PyObject *
PyUnicode_FromWideChar
( const wchar_t *w,Py_ssize_t size) - Return value: New reference.
从给定
wchar_t
的w缓冲区size创建一个Unicode对象.Passing-1
因为size表示函数本身必须计算长度,使用wcslen.Return NULL失败时
- Py_ssize_t
PyUnicode_AsWideChar
( PyObject *unicode,wchar_t *w,Py_ssize_t size) - 将Unicode对象内容复制到
wchar_t
缓冲区w。最多复制sizewchar_t
个字符(不包括可能的尾随终止字符)。如果出错,返回wchar_t
字符复制的数量或-1
。请注意,生成的wchar_t*
字符串可能会也可能不会以空值终止。如果应用程序需要,则确保wchar_t*
字符串以空值终止是callerto的责任。另请注意,wchar_t*
stringmight包含空字符,这会导致字符串在与大多数C函数一起使用时被截断.
- wchar_t*
PyUnicode_AsWideCharString
( PyObject *unicode,Py_ssize_t *size) - 将Unicode对象转换为宽字符串。输出stringalways以空字符结尾。如果size是不是NULL,将宽字符数(不包括尾随空终止字符)写入*size。注意结果
wchar_t
string可能包含空字符,这会导致在与大多数C函数一起使用时截断字符串。如果size是NULL和wchar_t*
stringcontains null characters aValueError
被养了返回成功时由
PyMem_Alloc()
分配的缓冲区(使用PyMem_Free()
释放它)。出错,返回NULL和*size未定义。如果内存分配失败,则提高MemoryError
.版本3.2.
更改版本3.7:如果
ValueError
是size并且NULL字符串包含空字符,则引发wchar_t*
.
内置编解码器
Python提供了一组内置的编解码器,这些编解码器用C语言编写以提高速度。所有这些编解码器都可以通过以下功能直接使用.
以下许多API都有两个参数编码和错误,它们与内置的str()
字符串objectconstructor具有相同的语义.
将编码设置为NULL导致使用ASCII的默认编码。文件系统调用应使用PyUnicode_FSConverter()
来编码文件名。这使用变量Py_FileSystemDefaultEncoding
内部。应该将此变量视为只读:在某些系统上,它将指向静态字符串,在其他系统上,它将在运行时更改(例如,当应用程序调用setlocale时).
错误处理由错误设置,错误也可以设置为NULL意思是使用为编解码器定义的默认处理。所有内置编解码器的默认错误处理都是“严格”(ValueError
被提出来.
编解码器都使用类似的接口。为了简单起见,只记录了与以下通用的偏差.
通用编解码器
这些是通用的编解码器API:
- PyObject *
PyUnicode_Decode
(const char *s,Py_ssize_t size,const char *encoding,const char *errors) - Return value: New reference.
通过解码编码字符串的size字节来创建一个Unicode对象s.encoding和errors与
str()
内置函数中的同名参数含义相同。使用Python编解码器注册表查找要使用的编解码器。返回NULL如果编解码器引发异常.
- PyObject*
PyUnicode_AsEncodedString
( PyObject *unicode,const char *encoding,const char *errors) - Return value: New reference.
对Unicode对象进行编码并将结果作为Python字节对象返回.encoding和errors的含义与Unicode
encode()
方法中同名的参数。使用Python编解码器注册表查找要使用的编解码器。返回NULL如果编解码器引发异常.
- PyObject*
PyUnicode_Encode
( const Py_UNICODE *s,Py_ssize_t size,const char *encoding,const char *errors) - Return value: New reference.
编码
Py_UNICODE
缓冲区s的给定size并返回一个Pythonbytes对象。encoding和errors与Unicodeencode()
方法中的同名参数具有相同的含义。使用Python编解码器注册表查找使用的codecto。返回NULL如果编解码器引发了异常。自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsEncodedString()
.
UTF-8编解码器
这些是UTF-8编解码器API:
- PyObject *
PyUnicode_DecodeUTF8
(const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码UTF-8的size字节来创建一个Unicode对象编码字符串s。返回NULL如果编解码器引发了异常.
- PyObject*
PyUnicode_DecodeUTF8Stateful
( const char *s,Py_ssize_t size,const char *errors,Py_ssize_t *consumed) - Return value: New reference.
如果consumed是NULL,表现得像
PyUnicode_DecodeUTF8()
。如果consumed不是NULL,则尾随不完整的UTF-8字节序列不会被视为错误。这些字节不会被解码,已解码的字节数将存储在consumed.
- PyObject *
PyUnicode_AsUTF8String
( PyObject *unicode) - Return value: New reference.
使用UTF-8编码Unicode对象并将结果作为Python bytesobject返回。错误处理是“严格的”。返回NULL如果编解码器提出了异常.
- const char *
PyUnicode_AsUTF8AndSize
( PyObject *unicode,Py_ssize_t *size) - 返回指向Unicode对象的UTF-8编码的指针,并将编码表示的大小(以字节为单位)存储在size中。size参数可以是NULL;在这种情况下,不会存储任何大小。无论是否有其他空代码点,都有缓冲区总是附加一个额外的空字节(不包括在size中).
如果出现错误,NULL返回异常集并且没有size存储.
这会在Unicode对象中缓存字符串的UTF-8表示,后续调用将返回指向同一缓冲区的指针。调用者不负责释放缓冲区.
新版本3.3.
更改版本3.7:返回类型现在是
const char *
而不是char *
.
- const char *
PyUnicode_AsUTF8
( PyObject *unicode) - 作为
PyUnicode_AsUTF8AndSize()
,但不存储尺寸.新版本3.3.
更改版本3.7:返回类型现在是
const char *
而不是char *
.
- PyObject *
PyUnicode_EncodeUTF8
( const Py_UNICODE *s,Py_ssize_t size,const char *errors) - Return value: New reference.
编码
Py_UNICODE
缓冲s的给定size使用UTF-8并返回一个Python字节对象。返回NULL如果编解码器引发了异常.自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsUTF8String()
,PyUnicode_AsUTF8AndSize()
或PyUnicode_AsEncodedString()
.
UTF-32编解码器
这些是UTF-32编解码器API:
- PyObject *
PyUnicode_DecodeUTF32
( const char *s,Py_ssize_t size,const char *errors,int *byteorder) - Return value: New reference.
解码size来自UTF-32编码缓冲区字符串的字节并返回相应的Unicode对象。errors(如果不是NULL)定义错误处理。它默认为“严格”.
如果byteorder不是NULL,解码器使用给定的byteorder开始解码:
*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
如果
*byteorder
为零,并且输入数据的前四个字节是abyte顺序标记(BOM),解码器切换到此字节顺序,并且BOM不会复制到生成的Unicode字符串中。如果*byteorder
是-1
要么1
,任何字节顺序标记都被复制到输出中.完成后,*byteorder设置为输入数据末尾的当前字节顺序.
如果byteorder是NULL,编解码器以本机顺序模式启动.
如果编解码器引发异常,则返回NULL
- PyObject*
PyUnicode_DecodeUTF32Stateful
( const char *s,Py_ssize_t size,const char *errors,int *byteorder,Py_ssize_t *consumed) - Return value: New reference.
如果consumed是NULL,就像
PyUnicode_DecodeUTF32()
。如果consumed不是NULL,PyUnicode_DecodeUTF32Stateful()
不会将不完整的UTF-32字节序列(例如不能被4整除的字节数)作为错误处理。这些字节不会被解码,已解码的字节数将存储在consumed.
- PyObject *
PyUnicode_AsUTF32String
( PyObject *unicode) - Return value: New reference.
使用本机byteorder中的UTF-32编码返回一个Python字节字符串。该字符串始终以BOM标记开头。错误处理是“严格的”。返回NULL如果编解码器引发了异常.
- PyObject*
PyUnicode_EncodeUTF32
( const Py_UNICODE *s,Py_ssize_t size,const char *errors,int byteorder) - Return value: New reference.
返回一个Python字节对象,其中包含s中的Unicodedata的UTF-32编码值。输出按以下字节顺序写入:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
如果byteorder是
0
,输出字符串将始终以Unicode BOMmark(U + FEFF)开头。在其他两种模式中,没有BOM标记.如果Py_UNICODE_WIDE没有定义,代理对将作为单个代码点输出.
返回NULL如果编解码器引发异常.
UTF-16编解码器
- PyObject *
PyUnicode_DecodeUTF16
( const char *s,Py_ssize_t size,const char *errors,int *byteorder) - Return value: New reference.
解码size来自UTF-16编码缓冲区字符串的字节,并返回相应的Unicode对象。errors(如果不是NULL)定义错误处理。它默认为“严格”.
如果byteorder不是NULL,则解码器使用给定的byteorder开始解码:
*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
如果
*byteorder
为零,并且输入数据的前两个字节是abyte顺序标记(BOM),解码器切换到此字节顺序,并且BOM不会复制到生成的Unicode字符串中。如果*byteorder
是-1
或1
,任何字节顺序标记都被复制到输出中(无论是\ufeff
还是\ufffe
字符都会产生).完成后,*byteorder设置为输入数据末尾的当前字节顺序.
如果byteorder是NULL,编解码器以本机顺序模式启动.
返回NULL如果编解码器引发了例外情况
- PyObject *
PyUnicode_DecodeUTF16Stateful
( const char *s,Py_ssize_t size,const char *errors,int *byteorder,Py_ssize_t *consumed) - Return value: New reference.
如果consumed是NULL,表现得像
PyUnicode_DecodeUTF16()
。如果consumed不是NULL,PyUnicode_DecodeUTF16Stateful()
将不会将不完整的UTF-16字节序列(例如奇数个字节或asplit代理对)作为错误处理。这些字节不会被解码,已解码的字节数将存储在consumed.
- PyObject *
PyUnicode_AsUTF16String
( PyObject *unicode) - Return value: New reference.
使用本机byteorder中的UTF-16编码返回Python字节字符串。该字符串始终以BOM标记开头。错误处理是“严格的”。如果编解码器引发异常,则返回NULL
- PyObject*
PyUnicode_EncodeUTF16
( const Py_UNICODE *s,Py_ssize_t size,const char *errors,int byteorder) - Return value: New reference.
返回一个Python字节对象,其中包含Unicodedata的UTF-16编码值s。输出按以下字节顺序写入:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
如果byteorder为
0
,则输出字符串将始终以Unicode BOMmark(U + FEFF)开头。在其他两种模式中,没有预先设置BOM标记.如果Py_UNICODE_WIDE被定义,单个
Py_UNICODE
值可以代表一个代理对。如果没有定义,每个Py_UNICODE
值被解释为UCS-2字符.返回NULL如果编解码器引发了例外情况
UTF-7编解码器
- PyObject *
PyUnicode_DecodeUTF7
( const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码UTF-7编码字符串size的s字节来创建Unicode对象。返回NULL如果编解码器引发了异常.
- PyObject*
PyUnicode_DecodeUTF7Stateful
( const char *s,Py_ssize_t size,const char *errors,Py_ssize_t *consumed) - Return value: New reference.
如果consumed是NULL,表现得像
PyUnicode_DecodeUTF7()
。如果consumed不是NULL尾随不完整的UTF-7 base-64部分不会被视为错误。这些字节不会被解码,已解码的字节数将存储在consumed.
- PyObject *
PyUnicode_EncodeUTF7
(const Py_UNICODE *s,Py_ssize_t size,int base64SetO,int base64WhiteSpace,const char *errors) - Return value: New reference.
编码
Py_UNICODE
缓冲区使用UTF-7给定大小并返回Python字节对象。返回NULL如果编解码器引发异常.如果base64SetO非零,“Set O”(没有其他特殊含义的标点符号)将在base-64中编码。如果base64WhiteSpace是isnonzero,则空格将以base-64编码。对于thePython“utf-7”编解码器,两者都设置为零.
自版本3.3以来,已删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsEncodedString()
.
Unicode-Escape Codecs
这些是“Unicode Escape”编解码器API:
- PyObject *
PyUnicode_DecodeUnicodeEscape
( const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码size字节的Unicode来创建一个Unicode对象逃脱编码串s。返回NULL如果编解码器引发异常.
- PyObject*
PyUnicode_AsUnicodeEscapeString
( PyObject *unicode) - Return value: New reference.
使用Unicode-Escape对Unicode对象进行编码,并将结果作为abytes对象返回。错误处理是“严格的”。返回NULL如果编解码器提出例外情况
- PyObject *
PyUnicode_EncodeUnicodeEscape
( const Py_UNICODE *s,Py_ssize_t size) - Return value: New reference.
编码给定的
Py_UNICODE
缓冲区size使用Unicode-Escape并返回一个bytes对象。返回NULL如果编解码器引发了例外情况从版本3.3开始不推荐使用,将在4.0版本中删除:部分旧式
Py_UNICODE
API;请迁移到使用PyUnicode_AsUnicodeEscapeString()
.
Raw-Unicode-Escape编解码器
这些是“Raw Unicode Escape”编解码器API:
- PyObject *
PyUnicode_DecodeRawUnicodeEscape
( const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码原始Unicode-Escapeencoded字符串size的s字节来创建Unicode对象。返回NULL如果编解码器引发异常.
- PyObject*
PyUnicode_AsRawUnicodeEscapeString
( PyObject *unicode) - Return value: New reference.
使用Raw-Unicode-Escape对Unicode对象进行编码,并将结果作为字节对象返回。错误处理是“严格的”。如果编解码器引发异常则返回NULL
- PyObject*
PyUnicode_EncodeRawUnicodeEscape
(const Py_UNICODE *s,Py_ssize_t size) - Return value: New reference.
编码
Py_UNICODE
给定缓冲区size使用Raw-Unicode-Escapeand返回一个bytes对象。返回NULL如果编解码器引发了例外情况从版本3.3开始不推荐使用,将在版本4.0中删除:部分旧式
Py_UNICODE
API;请迁移到使用PyUnicode_AsRawUnicodeEscapeString()
或PyUnicode_AsEncodedString()
.
Latin-1 Codecs
这些是Latin-1编解码器API:Latin-1对应于前256个Unicodeordinals,并且只有这些在编码期间被编解码器接受.
- PyObject*
PyUnicode_DecodeLatin1
(const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码size拉丁文-1编码字符串s的字节来创建一个Unicode对象。返回NULL如果编解码器引发异常则
- PyObject*
PyUnicode_AsLatin1String
( PyObject *unicode) - Return value: New reference.
使用Latin-1对Unicode对象进行编码,并将结果作为Python bytesobject返回。错误处理是“严格的”。返回NULL如果编解码器引起异常.
- PyObject*
PyUnicode_EncodeLatin1
( const Py_UNICODE *s,Py_ssize_t size,const char *errors) - Return value: New reference.
使用Latin-1编码给定
Py_UNICODE
的size缓冲区并返回一个Python字节对象。返回NULL如果编解码器引发了异常.自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsLatin1String()
或PyUnicode_AsEncodedString()
.
ASCII编码器
这些是ASCII编解码器API。仅接受7位ASCII数据。所有其他代码都会产生错误.
- PyObject*
PyUnicode_DecodeASCII
( const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
通过解码ASCII编码字符串size的s字节来创建一个Unicode对象。返回NULL如果编解码器引发异常.
- PyObject*
PyUnicode_AsASCIIString
( PyObject *unicode) - Return value: New reference.
使用ASCII编码Unicode对象并将结果作为Python bytesobject返回。错误处理是“严格的”。返回NULL如果编解码器引起异常.
- PyObject*
PyUnicode_EncodeASCII
( const Py_UNICODE *s,Py_ssize_t size,const char *errors) - Return value: New reference.
使用ASCII编码给定
Py_UNICODE
的size缓冲区并返回Python字节对象。返回NULL如果编解码器引发了异常.自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsASCIIString()
或PyUnicode_AsEncodedString()
.
字符映射编解码器
这个编解码器的特殊之处在于它可用于实现许多不同的编解码器(这实际上是做了什么获取encodings
包中包含的大部分标准codecs。编解码器使用映射来编码和解码字符。提供的映射对象必须支持__getitem__()
映射接口;字典和序列工作得很好
这些是映射编解码器API:
- PyObject *
PyUnicode_DecodeCharmap
( const char *data,Py_ssize_t size,PyObject *mapping,const char *errors) - Return value: New reference.
通过使用给定的size解码编码字符串s的mapping宾语。返回NULL如果编解码器引发异常.
如果mapping是NULL,将应用Latin-1解码。其他mapping必须将字节序数(0到255范围内的整数)映射到Unicode字符串,整数(然后解释为Unicodeordinals)或
None
。未映射的数据字节 – 导致LookupError
,以及映射到None
,0xFFFE
或"\ufffe"
的那些被视为未定义的映射并导致错误.
- PyObject*
PyUnicode_AsCharmapString
( PyObject *unicode,PyObject *mapping) - Return value: New reference.
使用给定的mapping对象对Unicode对象进行编码,并将结果作为字节对象返回。错误处理是“严格的”。如果编解码器提出异常,请返回NULL
mapping对象必须将Unicode序数整数映射到字节对象,整数范围为0到255或
None
。未映射的字符(导致LookupError
的字符)以及映射到None
被视为“未定义映射”并导致错误.
- PyObject*
PyUnicode_EncodeCharmap
( const Py_UNICODE *s,Py_ssize_t size,PyObject *mapping,const char *errors) - Return value: New reference.
编码
Py_UNICODE
给定size的缓冲区使用给定的mapping对象并将结果作为字节对象返回。返回NULL如果编解码器引发了异常。自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsCharmapString()
或PyUnicode_AsEncodedString()
.
以下编解码器API特别适用于将Unicode映射到Unicode.
- PyObject*
PyUnicode_Translate
( PyObject *unicode,PyObject *mapping,const char *errors) - Return value: New reference.
使用给定的mapping对象翻译Unicode对象并返回结果Unicode宾语。返回NULL如果编码引起异常
mappingobject必须将Unicode序数整数映射到Unicode字符串,整数(然后解释为Unicode序数)或
None
(导致删除字符)。未映射的字符序号(导致LookupError
的字符)保持不变并被复制为-is.
- PyObject*
PyUnicode_TranslateCharmap
( const Py_UNICODE *s,Py_ssize_t size,PyObject *mapping,const char *errors) - Return value: New reference.
翻译给定的
Py_UNICODE
缓冲区size通过将acharacter mapping表应用于它并返回生成的Unicode对象。当编解码器引发异常时返回NULL自版本3.3以来已删除,将在版本4.0中删除:部分旧式
Py_UNICODE
API;请转移到使用PyUnicode_Translate()
。或基于通用编解码器的API
适用于Windows的MBCS编解码器
这些是MBCS编解码器API。它们目前仅在Windows上可用,并使用Win32 MBCS转换器来实现转换。请注意,MBCS(或DBCS)是一类编码,而不仅仅是一种编码。目标编码由运行编解码器的机器上的用户设置定义.
- PyObject *
PyUnicode_DecodeMBCS
( const char *s,Py_ssize_t size,const char *errors) - Return value: New reference.
创建一个Unicode通过解码size MBCS编码字符串的字节s。返回NULL如果编解码器引发了异常.
- PyObject*
PyUnicode_DecodeMBCSStateful
( const char *s,Py_ssize_t size,const char *errors,Py_ssize_t *consumed) - Return value: New reference.
如果consumed是NULL,就像
PyUnicode_DecodeMBCS()
。如果consumed是不是NULL,PyUnicode_DecodeMBCSStateful()
不会解码引导字节,已经解码的字节数将被存储在consumed.
- PyObject *
PyUnicode_AsMBCSString
( PyObject *unicode) - Return value: New reference.
使用MBCS对Unicode对象进行编码,并将结果作为Python bytesobject返回。错误处理是“严格的”。返回NULL如果编解码器提出例外情况
- PyObject *
PyUnicode_EncodeCodePage
( int code_page,PyObject *unicode,const char *errors) - Return value: New reference.
编码Unicode对象使用指定的代码页并返回Pythonbytes对象。如果编解码器引发异常,则返回NULL。使用
CP_ACP
代码页获取MBCS编码器.新版本3.3.
- PyObject*
PyUnicode_EncodeMBCS
( const Py_UNICODE *s,Py_ssize_t size,const char *errors) - Return value: New reference.
使用MBCS编码给定
Py_UNICODE
的size缓冲区returna Python字节对象。返回NULL如果codec.引发异常,则自版本3.3以后删除,将在版本4.0中删除:部分旧版
Py_UNICODE
API;请迁移到使用PyUnicode_AsMBCSString()
,PyUnicode_EncodeCodePage()
或PyUnicode_AsEncodedString()
.
方法&amp;插槽
方法和插槽函数
以下API能够处理输入上的Unicode对象和字符串(我们在描述中将它们称为字符串)并根据需要返回Unicode对象或整数.
如果发生异常,他们都会NULL或-1
返回.
- PyObject*
PyUnicode_Concat
(PyObject *left,PyObject *right) - Return value: New reference.
Concat两个字符串给出一个新的Unicode字符串.
- PyObject*
PyUnicode_Split
( PyObject *s,PyObject *sep,Py_ssize_t maxsplit) - Return value: New reference.
拆分一个字符串,给出一个Unicode字符串列表。如果sep是NULL,则拆分将在所有空格子串中完成。否则,拆分发生在给定的分隔符处。最多maxsplit分裂将完成。如果是否定的,则没有限制。分隔符不包含在结果列表中.
- PyObject*
PyUnicode_Splitlines
( PyObject *s,int keepend) - Return value: New reference.
在换行符处拆分Unicode字符串,返回Unicode字符串列表.CRLF被认为是一个换行符。如果keepend是
0
,则行破解字符不包含在结果字符串中.
- PyObject*
PyUnicode_Translate
( PyObject *str,PyObject *table,const char *errors) - 通过对字符串应用字符映射表来转换字符串并返回结果的Unicode对象.
映射表必须将Unicode序数整数映射到Unicode序数整数
None
(导致删除字符).映射表只需要提供
__getitem__()
接口;字典和序列运作良好。未映射的字符序号(导致LookupError
)没有被触及并被复制as-is.errors具有编解码器的通常含义。它可能是NULL表示默认错误处理.
- PyObject*
PyUnicode_Join
( PyObject *separator,PyObject *seq) - Return value: New reference.
使用给定的separator加入一串字符串并返回得到的Unicode字符串.
- Py_ssize_t
PyUnicode_Tailmatch
( PyObject *str,PyObject *substr,Py_ssize_t start,Py_ssize_t end,int direction) - 返回
1
如果substr在给定的尾端匹配str[start:end]
(direction ==-1
表示做前缀匹配,direction ==1
后缀匹配),0
否则。返回-1
如果发生了错误.
- Py_ssize_t
PyUnicode_Find
( PyObject *str,PyObject *substr,Py_ssize_t start,Py_ssize_t end,int direction) - 使用给定的substr将
str[start:end]
的第一个位置返回到direction(direction==1
意思是进行前向搜索,direction ==-1
abackward search)。返回值是第一个匹配的索引;值-1
表示未找到匹配项,-2
表示发生了错误并且已设置异常.
- Py_ssize_t
PyUnicode_FindChar
( PyObject *str,Py_UCS4 ch,Py_ssize_t start,Py_ssize_t end,int direction) - 使用给定的ch(
str[start:end]
== direction表示进行前向搜索,返回direction在1
中的第一个位置direction ==-1
向后搜索)。返回值是第一次匹配的索引;值-1
表示未找到匹配项,-2
表示发生错误且已设置异常.3.3版本中新增了
//在版本3.7中更改:start和end现在调整为像
str[start:end]
.
- Py_ssize_t
PyUnicode_Count
( PyObject *str,PyObject *substr,Py_ssize_t start,Py_ssize_t end) - 返回substr非重叠出现的次数
str[start:end]
。返回-1
如果发生错误
- PyObject *
PyUnicode_Replace
(的PyObject *str,PyObject *substr,PyObject *replstr,Py_ssize_t maxcount) - Return value: New reference.
最多更换maxcount发生substr在str用replstr并返回生成的Unicode对象。maxcount ==
-1
表示替换alloccurrences.
- int
PyUnicode_Compare
( PyObject *left,PyObject *right) - 比较两个字符串并返回
-1
,0
,1
小于,等于,大于,分别.这个函数在失败时返回
-1
,所以应该调用PyErr_Occurred()
来检查错误.
- int
PyUnicode_CompareWithASCIIString
( PyObject *uni,const char *string) - 比较一个unicode对象,uni,string并返回
-1
,0
,1
分别小于,等于和大于。最好只传递ASCII编码的字符串,但如果输入字符串包含非ASCII字符,则该函数将输入字符串解释为ISO-8859-1 .这个函数不会引发异常.
- PyObject*
PyUnicode_RichCompare
( PyObject *left,PyObject *right,int op) - Return value: New reference.
Rich比较两个unicode字符串并返回以下内容之一:
NULL
如果出现异常Py_True
或Py_False
成功比较Py_NotImplemented
以防类型组合未知
op的可能值是
Py_GT
,Py_GE
,Py_EQ
,Py_NE
,Py_LT
和Py_LE
.
- PyObject *
PyUnicode_Format
( PyObject *format,PyObject *args) - Return value: New reference.
从format和args返回一个新的字符串对象;这类似于
format % args
.
- int
PyUnicode_Contains
( PyObject *container,PyObject *element) - 检查//是否element包含在container中并且相应地返回true或false。
element必须强制转换为单元素的Unicode字符串。
-1
如果出现错误则返回
- 避免
PyUnicode_InternInPlace
( PyObject **string) - 实习生*string 到位。参数必须是指向Python unicode字符串对象的apointer变量的地址。如果有一个与*string相同的实际字符串,则设置*stringtoit(递减旧字符串对象的引用计数并递增实习字符串对象的引用计数),否则它将单独留下*string并实例化(增加其引用计数)。(澄清:即使有一个很多关于引用计数的讨论,认为这个函数是引用计数中性的;你在callif之后拥有该对象,并且只有在调用之前拥有它。)
- PyObject *
PyUnicode_InternFromString
( const char *v) - Return value: New reference.
PyUnicode_FromString()
和PyUnicode_InternInPlace()
的组合,返回一个已被实习的新unicode stringobject,或者对具有相同值的较早的字符串对象的新(“拥有”)引用.
评论被关闭。