Unicode对象和编解码器¶
Unicode对象¶
自实施以来 PEP 393 在python 3.3中,unicode对象在内部使用各种表示,以便在保持内存效率的同时处理完整的unicode字符范围。对于所有代码点都低于128、256或65536的字符串,有一些特殊情况;否则,代码点必须低于1114112(即完整的Unicode范围)。
Py_UNICODE* UTF-8表示是按需创建的,并缓存在Unicode对象中。这个 Py_UNICODE* 不推荐使用表示法,而且效率低下;在性能或内存敏感的情况下应该避免使用表示法。
由于旧API和新API之间的转换,Unicode对象可以在内部处于两种状态,这取决于它们是如何创建的:
“canonical”unicode对象是由不推荐使用的unicode api创建的所有对象。它们使用实现所允许的最有效的表示。
“传统”Unicode对象是通过一个不推荐使用的API创建的(通常
PyUnicode_FromUnicode()
)只承受 Py_UNICODE* 代表;你必须打电话PyUnicode_READY()
在调用任何其他API之前。
注解
python3.12中的“遗留”Unicode对象将与不推荐的api一起删除。从那时起,所有Unicode对象都将是“规范的”。看到了吗 PEP 623 更多信息。
Unicode类型¶
以下是在Python中用于Unicode实现的基本Unicode对象类型:
-
type Py_UCS4¶
-
type Py_UCS2¶
-
type Py_UCS1¶
这些类型是无符号整数类型的typedef,其宽度足以分别包含32位、16位和8位的字符。处理单个Unicode字符时,请使用
Py_UCS4
.3.3 新版功能.
-
type Py_UNICODE¶
这是typedef
wchar_t
,它是16位类型或32位类型,具体取决于平台。在 3.3 版更改: 在以前的版本中,这是一个16位类型或32位类型,这取决于您在构建时选择的是“窄”还是“宽”Unicode版本的Python。
-
type PyASCIIObject¶
-
type PyCompactUnicodeObject¶
-
type PyUnicodeObject¶
这些子类型
PyObject
表示一个python unicode对象。在几乎所有情况下,都不应该直接使用它们,因为处理Unicode对象的所有API函数都接受并返回PyObject
指针。3.3 新版功能.
-
PyTypeObject PyUnicode_Type¶
此实例
PyTypeObject
表示python unicode类型。它向python代码公开为str
.
以下API实际上是C宏,可用于快速检查和访问Unicode对象的内部只读数据:
-
int PyUnicode_READY(PyObject *o)¶
确保字符串对象 o 在“规范”表示中。在使用下面描述的任何访问宏之前,都需要这样做。
返回
0
论成功与否-1
在失败时设置一个异常,特别是当内存分配失败时。3.3 新版功能.
Deprecated since version 3.10, will be removed in version 3.12: 此API将使用
PyUnicode_FromUnicode()
.
-
Py_ssize_t PyUnicode_GET_LENGTH(PyObject *o)¶
返回Unicode字符串的长度(以代码点为单位)。 o 必须是“规范”表示形式中的Unicode对象(未选中)。
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或ucs4整数类型的规范表示,以便直接访问字符。如果规范表示具有正确的字符大小,则不执行任何检查;请使用
PyUnicode_KIND()
选择正确的宏。确保PyUnicode_READY()
在访问此之前被调用。3.3 新版功能.
-
PyUnicode_WCHAR_KIND¶
-
PyUnicode_1BYTE_KIND¶
-
PyUnicode_2BYTE_KIND¶
-
PyUnicode_4BYTE_KIND¶
的返回值
PyUnicode_KIND()
宏。3.3 新版功能.
Deprecated since version 3.10, will be removed in version 3.12:
PyUnicode_WCHAR_KIND
被贬低。
-
int PyUnicode_KIND(PyObject *o)¶
返回一个pyunicode类常量(见上文),该常量指示此unicode对象用于存储其数据的每个字符的字节数。 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(o)¶
返回适用于根据创建另一个字符串的最大代码点 o 必须以“规范”表示。这总是一个近似值,但比在字符串上迭代更有效。
3.3 新版功能.
-
Py_ssize_t PyUnicode_GET_SIZE(PyObject *o)¶
返回已弃用的大小
Py_UNICODE
以代码单位表示(这包括作为2个单位的代理项对)。 o 必须是Unicode对象(未选中)。Deprecated since version 3.3, will be removed in version 3.12: 是旧式Unicode API的一部分,请迁移到
PyUnicode_GET_LENGTH()
.
-
Py_ssize_t PyUnicode_GET_DATA_SIZE(PyObject *o)¶
返回已弃用的大小
Py_UNICODE
以字节表示。 o 必须是Unicode对象(未选中)。Deprecated since version 3.3, will be removed in version 3.12: 是旧式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()
.Deprecated since version 3.3, will be removed in version 3.12: 作为旧式Unicode API的一部分,请使用
PyUnicode_nBYTE_DATA()
宏系列。
-
int PyUnicode_IsIdentifier(PyObject *o)¶
返回
1
如果字符串是根据语言定义的有效标识符,则 标识符和关键字 . 返回0
否则。在 3.9 版更改: 函数不调用
Py_FatalError()
如果绳子还没准备好的话。
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 版后已移除: 此函数使用简单的大小写映射。
-
Py_UNICODE Py_UNICODE_TOUPPER(Py_UNICODE ch)¶
返回字符 ch 已转换为大写。
3.3 版后已移除: 此函数使用简单的大小写映射。
-
Py_UNICODE Py_UNICODE_TOTITLE(Py_UNICODE ch)¶
返回字符 ch 已转换为标题大小写。
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(high, low)¶
联接两个代理项字符并返回单个py_cs4值。 high 和 low 分别是代理对中的前导和尾随代理。
创建和访问Unicode字符串¶
要创建Unicode对象并访问其基本序列属性,请使用以下API:
-
PyObject *PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)¶
- Return value: New reference.
创建新的Unicode对象。 麦克沙尔 应该是要放置在字符串中的真正最大代码点。作为近似值,它可以四舍五入到序列127255655351114111中最接近的值。
这是分配新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()
)这个 缓冲区 必须指向 size 每个字符1、2或4个字节的单位,如种类所示。3.3 新版功能.
-
PyObject *PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size)¶
- Return value: New reference.
从字符缓冲区创建Unicode对象 u . 字节将被解释为UTF-8编码。缓冲区被复制到新对象中。如果缓冲区不是
NULL
返回值可能是共享对象,即不允许修改数据。如果 u 是
NULL
,此函数的行为如下PyUnicode_FromUnicode()
将缓冲区设置为NULL
. 此用法已弃用,取而代之的是PyUnicode_New()
.
-
PyObject *PyUnicode_FromString(const char *u)¶
- Return value: New reference.
从UTF-8编码的以空结尾的字符缓冲区创建Unicode对象 u .
-
PyObject *PyUnicode_FromFormat(const char *format, ...)¶
- Return value: New reference.
采取C
printf()
风格 格式 字符串和变量个数的参数,计算得到的python unicode字符串的大小,并返回一个字符串,其中包含格式化为该字符串的值。变量参数必须是C类型,并且必须与中的格式字符完全对应。 格式 ASCII编码字符串。允许以下格式字符:设置字符格式
类型
评论
%%
n/a
文字%字符。
%c
int
单个字符,表示为C int。
%d
int
相当于
printf("%d")
. 1%u
无符号整型
相当于
printf("%u")
. 1%ld
长的
相当于
printf("%ld")
. 1%li
长的
相当于
printf("%li")
. 1%lu
无符号长
相当于
printf("%lu")
. 1%lld
长长
相当于
printf("%lld")
. 1%lli
长长
相当于
printf("%lli")
. 1%llu
无符号长整型
相当于
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
常量字符 *
以空结尾的C字符数组。
%p
常数空隙 *
C指针的十六进制表示。主要相当于
printf("%p")
除了保证从字面开始0x
不管平台是什么printf
产量。%A
PyObject *
调用的结果
ascii()
.%U
PyObject *
Unicode对象。
%V
PyObject * conchar *
Unicode对象(可能是
NULL
)以及以空结尾的C字符数组作为第二个参数(如果第一个参数是NULL
)%S
PyObject *
调用的结果
PyObject_Str()
.%R
PyObject *
调用的结果
PyObject_Repr()
.无法识别的格式字符会将格式字符串的其余部分按原样复制到结果字符串,并丢弃任何多余的参数。
注解
宽度格式化程序单位是字符数而不是字节数。精度格式化程序单位是的字节数
"%s"
和"%V"
(如果PyObject*
论证是NULL
),以及"%A"
,"%U"
,"%S"
,"%R"
和"%V"
(如果PyObject*
论点不是NULL
)在 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
等 bytes-like objects 根据给定的 编码 并使用由定义的错误处理 错误 . 两者都可以NULL
要让接口使用默认值(请参见 内置编译码器 详情请参阅。所有其他对象,包括Unicode对象,都会导致
TypeError
被设定。API返回
NULL
如果有错误。调用方负责递减返回的对象。
-
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对象复制到另一个对象。此函数在必要时执行字符转换,并返回到
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
并在出错时引发异常。3.3 新版功能.
-
int PyUnicode_WriteChar(PyObject *unicode, Py_ssize_t index, Py_UCS4 character)¶
将字符写入字符串。字符串必须是通过
PyUnicode_New()
. 因为unicode字符串应该是不可变的,所以不能共享该字符串,也不能对其进行hash运算。此函数检查 unicode 是Unicode对象,索引没有越界,并且可以安全地修改该对象(即其引用计数为1)。
3.3 新版功能.
-
Py_UCS4 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)¶
从字符串中读取字符。此函数检查 unicode 是Unicode对象,与宏版本不同,索引没有越界
PyUnicode_READ_CHAR()
.3.3 新版功能.
-
PyObject *PyUnicode_Substring(PyObject *str, Py_ssize_t start, Py_ssize_t end)¶
- Return value: New reference.
返回的子字符串 str ,来自字符索引 开始 (包括)到字符索引 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
如果 缓冲区长度 小于 u ) 缓冲区 成功时返回。3.3 新版功能.
-
Py_UCS4 *PyUnicode_AsUCS4Copy(PyObject *u)¶
复制字符串 u 到新的UCS4缓冲区中,该缓冲区使用
PyMem_Malloc()
. 如果失败了,NULL
返回时带有MemoryError
集合。返回的缓冲区总是附加了额外的空代码点。3.3 新版功能.
不推荐使用的py-unicode API¶
Deprecated since version 3.3, will be removed in version 4.0.
这些API函数在实现 PEP 393 . 扩展模块可以继续使用它们,因为它们在python 3.x中不会被删除,但需要注意,它们的使用现在可能会导致性能和内存命中。
-
PyObject *PyUnicode_FromUnicode(const Py_UNICODE *u, Py_ssize_t size)¶
- Return value: New reference.
从py_unicode缓冲区创建unicode对象 u 给定大小的。 u 可能是
NULL
导致内容未定义。用户有责任填写所需的数据。缓冲区被复制到新对象中。如果缓冲区不是
NULL
,返回值可能是共享对象。因此,只有当 u 是NULL
.如果缓冲区是
NULL
,PyUnicode_READY()
在使用任何访问宏(如PyUnicode_KIND()
.Deprecated since version 3.3, will be removed in version 3.12: 是旧式Unicode API的一部分,请迁移到
PyUnicode_FromKindAndData()
,PyUnicode_FromWideChar()
或PyUnicode_New()
.
-
Py_UNICODE *PyUnicode_AsUnicode(PyObject *unicode)¶
返回指向Unicode对象内部的只读指针
Py_UNICODE
缓冲器,或NULL
关于错误。这将创建 Py_UNICODE* 如果对象尚不可用,则表示该对象。缓冲区总是以额外的空代码点终止。注意结果Py_UNICODE
字符串还可以包含嵌入的空代码点,这将导致在大多数C函数中使用时截断字符串。Deprecated since version 3.3, will be removed in version 3.12: 是旧式Unicode API的一部分,请迁移到
PyUnicode_AsUCS4()
,PyUnicode_AsWideChar()
,PyUnicode_ReadChar()
或类似的新API。
-
PyObject *PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, Py_ssize_t size)¶
- Return value: New reference.
通过替换中的所有十进制数字来创建Unicode对象
Py_UNICODE
给定的缓冲区 size 根据十进制值,用ASCII数字0-9表示。返回NULL
如果发生异常。
-
Py_UNICODE *PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size)¶
类似于
PyUnicode_AsUnicode()
,但也保存了Py_UNICODE()
中的数组长度(不包括额外的空终止符) size . 注意结果 Py_UNICODE* 字符串可能包含嵌入的空代码点,这将导致在大多数C函数中使用时截断字符串。3.3 新版功能.
Deprecated since version 3.3, will be removed in version 3.12: 是旧式Unicode API的一部分,请迁移到
PyUnicode_AsUCS4()
,PyUnicode_AsWideChar()
,PyUnicode_ReadChar()
或类似的新API。
-
Py_ssize_t PyUnicode_GetSize(PyObject *unicode)¶
返回已弃用的大小
Py_UNICODE
以代码单位表示(这包括作为2个单位的代理项对)。Deprecated since version 3.3, will be removed in version 3.12: 是旧式Unicode API的一部分,请迁移到
PyUnicode_GET_LENGTH()
.
区域编码¶
当前的区域设置编码可用于从操作系统解码文本。
-
PyObject *PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, const char *errors)¶
- Return value: New reference.
从android和vxworks上的utf-8或其他平台上的当前区域设置编码中解码字符串。支持的错误处理程序是
"strict"
和"surrogateescape"
(PEP 383 )解码器使用"strict"
错误处理程序if errors 是NULL
. str 必须以空字符结尾,但不能包含嵌入的空字符。使用
PyUnicode_DecodeFSDefaultAndSize()
从中解码字符串Py_FileSystemDefaultEncoding
(在python启动时读取的区域设置编码)。此函数忽略 Python UTF-8 Mode 。
参见
这个
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()
,但使用strlen()
.3.3 新版功能.
-
PyObject *PyUnicode_EncodeLocale(PyObject *unicode, const char *errors)¶
- Return value: New reference.
在android和vxworks上将unicode对象编码为utf-8,或者在其他平台上将其编码为当前的区域设置编码。支持的错误处理程序是
"strict"
和"surrogateescape"
(PEP 383 )编码器使用"strict"
错误处理程序if errors 是NULL
. 返回Abytes
对象。 unicode 不能包含嵌入的空字符。使用
PyUnicode_EncodeFSDefault()
将字符串编码为Py_FileSystemDefaultEncoding
(在python启动时读取的区域设置编码)。此函数忽略 Python UTF-8 Mode 。
参见
这个
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
对象按原样输出。 结果 必须是 PyBytesObject* 必须在不再使用时释放。3.1 新版功能.
在 3.6 版更改: 接受一 path-like object .
将文件名解码为 str
在参数解析过程中, "O&"
应使用转换器,通过 PyUnicode_FSDecoder()
作为转换函数:
-
int PyUnicode_FSDecoder(PyObject *obj, void *result)¶
ParseTuple转换器:解码
bytes
对象——直接或间接通过os.PathLike
接口——对str
使用PyUnicode_DecodeFSDefaultAndSize()
;str
对象按原样输出。 结果 必须是 PyUnicodeObject* 必须在不再使用时释放。3.2 新版功能.
在 3.6 版更改: 接受一 path-like object .
-
PyObject *PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)¶
- Return value: New reference.
对象中的字符串进行解码。 filesystem encoding and error handler 。
如果
Py_FileSystemDefaultEncoding
未设置,请返回到区域设置编码。Py_FileSystemDefaultEncoding
从区域设置编码启动时初始化,以后无法修改。如果需要从当前区域设置编码中解码字符串,请使用PyUnicode_DecodeLocaleAndSize()
.参见
这个
Py_DecodeLocale()
功能。在 3.6 版更改: 使用
Py_FileSystemDefaultEncodeErrors
错误处理程序。
-
PyObject *PyUnicode_DecodeFSDefault(const char *s)¶
- Return value: New reference.
方法中解码以NULL结尾的字符串。 filesystem encoding and error handler 。
如果
Py_FileSystemDefaultEncoding
未设置,请返回到区域设置编码。使用
PyUnicode_DecodeFSDefaultAndSize()
如果你知道绳子的长度。在 3.6 版更改: 使用
Py_FileSystemDefaultEncodeErrors
错误处理程序。
-
PyObject *PyUnicode_EncodeFSDefault(PyObject *unicode)¶
- Return value: New reference.
将Unicode对象编码为
Py_FileSystemDefaultEncoding
与Py_FileSystemDefaultEncodeErrors
错误处理程序,并返回bytes
. 注意结果bytes
对象可能包含空字节。如果
Py_FileSystemDefaultEncoding
未设置,请返回到区域设置编码。Py_FileSystemDefaultEncoding
从区域设置编码启动时初始化,以后无法修改。如果需要将字符串编码为当前区域设置编码,请使用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.
从创建Unicode对象
wchar_t
缓冲区 w 给定的 size .经过-1
作为 size 指示函数本身必须使用wcslen计算长度。返回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* 如果应用程序需要,则字符串以空结尾。另外,请注意 wchar_t* 字符串可能包含空字符,这将导致字符串在与大多数C函数一起使用时被截断。
-
wchar_t *PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size)¶
将Unicode对象转换为宽字符串。输出字符串始终以空字符结尾。如果 size 不是
NULL
,将宽字符数(不包括尾随的空终止字符)写入 *size . 注意结果wchar_t
字符串可能包含空字符,这将导致字符串在与大多数C函数一起使用时被截断。如果 size 是NULL
以及 wchar_t* 字符串包含空字符aValueError
提高了。返回由分配的缓冲区
PyMem_Alloc()
(使用)PyMem_Free()
在成功的时候。出错时返回NULL
和 *size 是未定义的。提出一个MemoryError
如果内存分配失败。3.2 新版功能.
在 3.7 版更改: 提出一个
ValueError
如果 size 是NULL
以及 wchar_t* 字符串包含空字符。
内置编译码器¶
Python提供了一组内置的编解码器,这些编解码器是用C语言编写的,以提高速度。所有这些编解码器都可以通过以下函数直接使用。
以下许多API采用两个参数编码和错误,它们的语义与内置API的语义相同 str()
字符串对象构造函数。
正在将编码设置为 NULL
导致使用默认编码,即UTF-8。文件系统调用应该使用 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.
通过解码创建Unicode对象 size 编码字符串的字节数 s . 编码 和 错误 与中同名参数的含义相同
str()
内置功能。使用python codec注册表查找要使用的编解码器。返回NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)¶
- Return value: New reference.
对unicode对象进行编码,并将结果返回为python bytes对象。 编码 和 错误 与Unicode中同名参数的含义相同
encode()
方法。使用python codec注册表查找要使用的编解码器。返回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 并返回一个python bytes对象。 编码 和 错误 与Unicode中同名参数的含义相同encode()
方法。使用python codec注册表查找要使用的编解码器。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 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.
通过解码创建Unicode对象 size UTF-8编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Return value: New reference.
如果 消耗 是
NULL
表现得像PyUnicode_DecodeUTF8()
.如果 消耗 不是NULL
,尾随不完整的UTF-8字节序列将不会被视为错误。将不解码这些字节,已解码的字节数将存储在 消耗 .
-
PyObject *PyUnicode_AsUTF8String(PyObject *unicode)¶
- Return value: New reference.
使用utf-8对unicode对象进行编码,并将结果返回为python bytes对象。错误处理是“严格的”。返回
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 *
.在 3.10 版更改: 此函数是 limited API 。
-
const char *PyUnicode_AsUTF8(PyObject *unicode)¶
AS
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 bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 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对象。 错误 (如果非-
NULL
)定义错误处理。它默认为“严格”。如果 字节顺序 是非-``NULL`,解码器使用给定的字节顺序开始解码:
*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
如果
*byteorder
为零,输入数据的前四个字节是字节顺序标记(bom),解码器切换到此字节顺序,而bom不会复制到生成的unicode字符串中。如果*byteorder
是-1
或1
,任何字节顺序标记都将复制到输出。完成后, *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.
如果 消耗 是
NULL
表现得像PyUnicode_DecodeUTF32()
.如果 消耗 不是NULL
,PyUnicode_DecodeUTF32Stateful()
不会将尾随的不完整的UTF-32字节序列(例如不能被4整除的字节数)视为错误。将不解码这些字节,已解码的字节数将存储在 消耗 .
-
PyObject *PyUnicode_AsUTF32String(PyObject *unicode)¶
- Return value: New reference.
以本机字节顺序使用UTF-32编码返回python字节字符串。字符串总是以物料清单标记开头。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶
- Return value: New reference.
返回一个python bytes对象,该对象包含unicode数据的utf-32编码值 s . 输出按以下字节顺序写入:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
如果是顺序
0
,输出字符串将始终以unicode bom标记(u+feff)开头。在其他两种模式中,没有预先设置物料清单标记。如果
Py_UNICODE_WIDE
未定义,代理项对将作为单个代码点输出。返回
NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsUTF32String()
或PyUnicode_AsEncodedString()
.
UTF—16编解码器¶
这些是UTF-16编解码器API:
-
PyObject *PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors, int *byteorder)¶
- Return value: New reference.
译码 size 来自UTF-16编码缓冲区字符串的字节,并返回相应的Unicode对象。 错误 (如果非-
NULL
)定义错误处理。它默认为“严格”。如果 字节顺序 是非-``NULL`,解码器使用给定的字节顺序开始解码:
*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
如果
*byteorder
为零,输入数据的前两个字节是字节顺序标记(bom),解码器切换到此字节顺序,而bom不会复制到生成的unicode字符串中。如果*byteorder
是-1
或1
,任何字节顺序标记都将复制到输出(在输出中,它将导致\ufeff
或A\ufffe
性格)完成后, *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.
如果 消耗 是
NULL
表现得像PyUnicode_DecodeUTF16()
.如果 消耗 不是NULL
,PyUnicode_DecodeUTF16Stateful()
不会将尾随不完整的UTF-16字节序列(例如奇数字节或拆分代理项对)视为错误。将不解码这些字节,已解码的字节数将存储在 消耗 .
-
PyObject *PyUnicode_AsUTF16String(PyObject *unicode)¶
- Return value: New reference.
以本机字节顺序使用UTF-16编码返回python字节字符串。字符串总是以物料清单标记开头。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, const char *errors, int byteorder)¶
- Return value: New reference.
返回一个python bytes对象,该对象保存unicode数据的utf-16编码值 s . 输出按以下字节顺序写入:
byteorder == -1: little endian byteorder == 0: native byte order (writes a BOM mark) byteorder == 1: big endian
如果是顺序
0
,输出字符串将始终以unicode bom标记(u+feff)开头。在其他两种模式中,没有预先设置物料清单标记。如果
Py_UNICODE_WIDE
定义为,单个Py_UNICODE
值可以表示为代理项对。如果没有定义,每个Py_UNICODE
值被解释为UCS-2字符。返回
NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsUTF16String()
或PyUnicode_AsEncodedString()
.
UTF—7编解码器¶
这些是UTF-7编解码器API:
-
PyObject *PyUnicode_DecodeUTF7(const char *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
通过解码创建Unicode对象 size UTF-7编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_DecodeUTF7Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Return value: New reference.
如果 消耗 是
NULL
表现得像PyUnicode_DecodeUTF7()
. 如果 消耗 不是NULL
,尾随不完整的utf-7 base-64节将不会被视为错误。将不解码这些字节,已解码的字节数将存储在 消耗 .
-
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 bytes对象的给定大小的缓冲区。返回NULL
如果编解码器引发异常。如果 Base64 SETO 非零,“set o”(没有其他特殊含义的标点)将编码在base-64中。如果 基准64空白 为非零,空白将以base-64编码。对于python的“utf-7”编解码器,两者都设置为零。
Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsEncodedString()
.
Unicode转义编解码器¶
这些是“Unicode Escape”编解码器API:
-
PyObject *PyUnicode_DecodeUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
通过解码创建Unicode对象 size Unicode转义编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_AsUnicodeEscapeString(PyObject *unicode)¶
- Return value: New reference.
使用unicode转义对unicode对象进行编码,并将结果作为bytes对象返回。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶
- Return value: New reference.
编码
Py_UNICODE
给定的缓冲区 size 使用unicode转义并返回bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsUnicodeEscapeString()
.
原始Unicode转义编解码器¶
这些是“原始Unicode转义”编解码器API:
-
PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
通过解码创建Unicode对象 size 原始Unicode转义编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)¶
- Return value: New reference.
使用原始Unicode转义对Unicode对象进行编码,并将结果作为字节对象返回。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size)¶
- Return value: New reference.
编码
Py_UNICODE
给定的缓冲区 size 使用原始Unicode转义并返回bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsRawUnicodeEscapeString()
或PyUnicode_AsEncodedString()
.
拉丁语-1编解码器¶
这些是Latin-1编解码器API:Latin-1对应于前256个Unicode序号,编码期间编解码器只接受这些序号。
-
PyObject *PyUnicode_DecodeLatin1(const char *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
通过解码创建Unicode对象 size Latin-1编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_AsLatin1String(PyObject *unicode)¶
- Return value: New reference.
使用Latin-1对Unicode对象进行编码,并将结果返回为python bytes对象。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
编码
Py_UNICODE
给定的缓冲区 size 使用Latin-1并返回python bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 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.
通过解码创建Unicode对象 size ASCII编码字符串的字节数 s . 返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_AsASCIIString(PyObject *unicode)¶
- Return value: New reference.
使用ASCII对Unicode对象进行编码,并将结果作为python bytes对象返回。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
编码
Py_UNICODE
给定的缓冲区 size 使用ASCII并返回python bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsASCIIString()
或PyUnicode_AsEncodedString()
.
字符映射编解码器¶
这个编解码器是特殊的,因为它可以用来实现许多不同的编解码器(实际上,这是为了获得包含在 encodings
封装)。编解码器使用映射对字符进行编码和解码。提供的映射对象必须支持 __getitem__()
映射接口;字典和序列工作良好。
以下是映射编解码器API:
-
PyObject *PyUnicode_DecodeCharmap(const char *data, Py_ssize_t size, PyObject *mapping, const char *errors)¶
- Return value: New reference.
通过解码创建Unicode对象 size 编码字符串的字节数 s 使用给定的 映射 对象。返回
NULL
如果编解码器引发异常。如果 映射 是
NULL
,将应用拉丁文-1解码。否则 映射 必须将字节序数(0到255范围内的整数)映射到Unicode字符串、整数(然后被解释为Unicode序数)或None
. 未映射的数据字节--导致LookupError
以及映射到None
,0xFFFE
或'\ufffe'
,将被视为未定义的映射并导致错误。
-
PyObject *PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)¶
- Return value: New reference.
使用给定的 映射 对象,并将结果作为字节对象返回。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。这个 映射 对象必须将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 使用给定的 映射 对象,并将结果作为字节对象返回。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsCharmapString()
或PyUnicode_AsEncodedString()
.
以下编解码器API在将Unicode映射到Unicode时是特殊的。
-
PyObject *PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors)¶
- Return value: New reference.
通过对字符串应用字符映射表来转换字符串并返回结果Unicode对象。返回
NULL
如果编解码器引发异常。映射表必须将Unicode顺序整数映射到Unicode顺序整数或
None
(导致删除字符)。映射表只需要提供
__getitem__()
界面;字典和序列工作良好。未映射的字符序号(导致LookupError
)保持原样,并按原样复制。错误 对编解码器具有通常意义。它可能是
NULL
指示使用默认错误处理。
-
PyObject *PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, PyObject *mapping, const char *errors)¶
- Return value: New reference.
翻译一
Py_UNICODE
给定的缓冲区 size 通过应用一个字符 映射 表并返回生成的Unicode对象。返回NULL
当编解码器引发异常时。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_Translate()
.或 generic codec based 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.
如果 消耗 是
NULL
表现得像PyUnicode_DecodeMBCS()
.如果 消耗 不是NULL
,PyUnicode_DecodeMBCSStateful()
将不解码尾随的前导字节,已解码的字节数将存储在 消耗 .
-
PyObject *PyUnicode_AsMBCSString(PyObject *unicode)¶
- Return value: New reference.
使用mbcs对unicode对象进行编码,并将结果返回为python bytes对象。错误处理是“严格的”。返回
NULL
如果编解码器引发异常。
-
PyObject *PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors)¶
- Return value: New reference.
使用指定的代码页对unicode对象进行编码,并返回python bytes对象。返回
NULL
如果编解码器引发异常。使用CP_ACP
获取MBCS编码器的代码页。3.3 新版功能.
-
PyObject *PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors)¶
- Return value: New reference.
编码
Py_UNICODE
给定的缓冲区 size 使用mbcs并返回python bytes对象。返回NULL
如果编解码器引发异常。Deprecated since version 3.3, will be removed in version 4.0: 旧风格的一部分
Py_UNICODE
API;请迁移到使用PyUnicode_AsMBCSString()
,PyUnicode_EncodeCodePage()
或PyUnicode_AsEncodedString()
.
方法和插槽¶
方法和Slot函数¶
以下API能够在输入时处理Unicode对象和字符串(我们在描述中将它们称为字符串),并根据需要返回Unicode对象或整数。
他们都回来了 NULL
或 -1
如果发生异常。
-
PyObject *PyUnicode_Concat(PyObject *left, PyObject *right)¶
- Return value: New reference.
连接两个字符串以生成新的Unicode字符串。
-
PyObject *PyUnicode_Split(PyObject *s, PyObject *sep, Py_ssize_t maxsplit)¶
- Return value: New reference.
拆分一个提供Unicode字符串列表的字符串。如果 sep 是
NULL
,将在所有空白子字符串上执行拆分。否则,在给定的分隔符处会发生拆分。至多 最大分割 将进行拆分。如果为负,则不设置限制。结果列表中不包含分隔符。
-
PyObject *PyUnicode_Splitlines(PyObject *s, int keepend)¶
- Return value: New reference.
在换行符处拆分一个Unicode字符串,返回一个Unicode字符串列表。CRLF被认为是一个换行符。如果 守护者 是
0
,换行符不包含在生成的字符串中。
-
PyObject *PyUnicode_Join(PyObject *separator, PyObject *seq)¶
- Return value: New reference.
使用给定的 分离器 并返回生成的Unicode字符串。
-
Py_ssize_t PyUnicode_Tailmatch(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶
返回
1
如果 子串 比赛str[start:end]
在给定的尾部( 方向 =-1
表示进行前缀匹配, 方向 =1
后缀匹配)0
否则。返回-1
如果发生错误。
-
Py_ssize_t PyUnicode_Find(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶
返回的第一个位置 子串 在里面
str[start:end]
使用给定的 方向 ( 方向 =1
意思是向前搜索, 方向 =-1
反向搜索)。返回值是第一个匹配的索引;值为-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]
使用给定的 方向 ( 方向 =1
意思是向前搜索, 方向 =-1
反向搜索)。返回值是第一个匹配的索引;值为-1
指示未找到匹配项,并且-2
指示发生错误并设置了异常。3.3 新版功能.
在 3.7 版更改: 开始 和 end 现在被调整成
str[start:end]
.
-
Py_ssize_t PyUnicode_Count(PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)¶
返回 子串 在里面
str[start:end]
. 返回-1
如果发生错误。
-
PyObject *PyUnicode_Replace(PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)¶
- Return value: New reference.
最多替换 最大数量 出现次数 子串 在里面 str 具有 应答器 并返回生成的Unicode对象。 最大数量 =
-1
表示替换所有事件。
-
int PyUnicode_Compare(PyObject *left, PyObject *right)¶
比较两个字符串并返回
-1
,0
,1
分别表示小于、等于和大于。此函数返回
-1
一旦失败,就应该调用PyErr_Occurred()
检查是否有错误。
-
int PyUnicode_CompareWithASCIIString(PyObject *uni, const char *string)¶
比较unicode对象, uni 用 一串 然后返回
-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.
从返回新的字符串对象 格式 和 args ;这类似于
format % args
.
-
int PyUnicode_Contains(PyObject *container, PyObject *element)¶
检查是否 要素 包含在 容器 并相应地返回真或假。
要素 必须强制为一个元素unicode字符串。
-1
如果出现错误,则返回。
-
void PyUnicode_InternInPlace(PyObject **string)¶
实习辩论 *string 到位。参数必须是指向python unicode字符串对象的指针变量的地址。如果存在与 *string ,它设置 *string 对它(减少旧字符串对象的引用计数并增加实习字符串对象的引用计数),否则它将离开 *string 单独并实习(增加其引用计数)。(说明:尽管有很多关于引用计数的讨论,但可以将此函数视为引用计数中性函数;只有在调用前拥有对象时,调用后才拥有该对象。)
-
PyObject *PyUnicode_InternFromString(const char *v)¶
- Return value: New reference.
结合
PyUnicode_FromString()
和PyUnicode_InternInPlace()
,返回一个新的已实习的Unicode字符串对象,或返回对具有相同值的先前实习字符串对象的新(“拥有”)引用。