“Python/docs/3.9/c-api/codec”的版本间差异
来自菜鸟教程
Python/docs/3.9/c-api/codec
(autoload) |
小 (Page commit) |
||
第1行: | 第1行: | ||
+ | {{DISPLAYTITLE:编解码器注册表和支持函数 — Python 文档}} | ||
<div id="codec-registry-and-support-functions" class="section"> | <div id="codec-registry-and-support-functions" class="section"> | ||
<span id="codec-registry"></span> | <span id="codec-registry"></span> | ||
− | = | + | = 编解码器注册和支持功能 = |
<dl> | <dl> | ||
− | <dt>int < | + | <dt><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_Register</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">search_function</span></span><span class="sig-paren">)</span><br /> |
− | <dd><p> | + | </dt> |
− | <p> | + | <dd><p>注册新的编解码器搜索功能。</p> |
− | + | <p>作为副作用,这会尝试加载 <code>encodings</code> 包(如果尚未完成),以确保它始终位于搜索功能列表中的第一个位置。</p></dd></dl> | |
− | ; int < | + | ; <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_KnownEncoding</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span><span class="sig-paren">)</span><br /> |
− | : | + | |
+ | : 返回 <code>1</code> 或 <code>0</code>,具体取决于是否为给定的 ''encoding'' 注册了编解码器。 此功能总是成功。 | ||
<dl> | <dl> | ||
− | <dt>[[../structures#c|PyObject]] *< | + | <dt>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_Encode</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">object</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> |
− | <dd><p> | + | </dt> |
− | + | <dd><p>基于通用编解码器的编码 API。</p> | |
− | <p>''object'' | + | <p>''object'' 使用由 ''errors'' 定义的错误处理方法,通过为给定的 ''encoding'' 找到的编码器函数传递。 ''errors'' 可能是 <code>NULL</code> 以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 [[../../library/exceptions#LookupError|LookupError]]。</p></dd></dl> |
− | '' | ||
− | |||
− | [[../../library/exceptions#LookupError| | ||
<dl> | <dl> | ||
− | <dt>[[../structures#c|PyObject]] *< | + | <dt>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_Decode</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">object</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> |
− | <dd><p> | + | </dt> |
− | + | <dd><p>基于通用编解码器的解码 API。</p> | |
− | <p>''object'' | + | <p>''object'' 使用由 ''errors'' 定义的错误处理方法,通过为给定的 ''encoding'' 找到的解码器函数传递。 ''errors'' 可能是 <code>NULL</code> 以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 [[../../library/exceptions#LookupError|LookupError]]。</p></dd></dl> |
− | '' | ||
− | |||
− | [[../../library/exceptions#LookupError| | ||
<div id="codec-lookup-api" class="section"> | <div id="codec-lookup-api" class="section"> | ||
− | == | + | == 编解码器查找 API == |
+ | |||
+ | 在以下函数中,''encoding'' 字符串被查找转换为所有小写字符,这使得通过该机制查找的编码有效地不区分大小写。 如果未找到编解码器,则设置 [[../../library/exceptions#KeyError|KeyError]] 并返回 <code>NULL</code>。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_Encoder</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 获取给定 ''encoding'' 的编码器函数。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_Decoder</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 获取给定 ''encoding'' 的解码器函数。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_IncrementalEncoder</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> | ||
− | + | : 获取给定 ''encoding'' 的 [[../../library/codecs#codecs|IncrementalEncoder]] 对象。 | |
− | |||
− | |||
− | |||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_IncrementalDecoder</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | < | ||
− | < | ||
− | + | : 获取给定 ''encoding'' 的 [[../../library/codecs#codecs|IncrementalDecoder]] 对象。 | |
− | |||
− | |||
− | |||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_StreamReader</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">stream</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | < | ||
− | < | ||
− | + | : 获取给定 ''编码'' 的 [[../../library/codecs#codecs|StreamReader]] 工厂函数。 | |
− | |||
− | |||
− | |||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_StreamWriter</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">encoding</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">stream</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">errors</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | < | ||
− | < | ||
− | + | : 获取给定 ''编码'' 的 [[../../library/codecs#codecs|StreamWriter]] 工厂函数。 | |
− | |||
− | |||
− | |||
第74行: | 第61行: | ||
<div id="registry-api-for-unicode-encoding-error-handlers" class="section"> | <div id="registry-api-for-unicode-encoding-error-handlers" class="section"> | ||
− | == | + | == 用于 Unicode 编码错误处理程序的注册表 API == |
<dl> | <dl> | ||
− | <dt>int < | + | <dt><span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_RegisterError</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">name</span></span>, [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">error</span></span><span class="sig-paren">)</span><br /> |
− | <dd><p> | + | </dt> |
− | + | <dd><p>在给定的 ''name'' 下注册错误处理回调函数 ''error''。 当编解码器遇到不可编码的字符/不可解码的字节并且在调用编码/解码函数时将 ''name'' 指定为错误参数时,该回调函数将被编解码器调用。</p> | |
− | + | <p>回调获取一个参数,一个 [[../../library/exceptions#UnicodeEncodeError|UnicodeEncodeError]]、[[../../library/exceptions#UnicodeDecodeError|UnicodeDecodeError]] 或 [[../../library/exceptions#UnicodeTranslateError|UnicodeTranslateError]] 的实例,其中包含有关有问题的字符或字节序列及其在原始文件中的偏移量的信息字符串(有关提取此信息的函数,请参阅 [[../exceptions#unicodeexceptions|Unicode 异常对象]] )。 回调必须要么引发给定的异常,要么返回一个包含有问题序列的替换的二项元组,以及一个整数,给出原始字符串中应恢复编码/解码的偏移量。</p> | |
− | + | <p>成功返回 <code>0</code>,错误返回 <code>-1</code>。</p></dd></dl> | |
− | <p> | ||
− | [[../../library/exceptions#UnicodeEncodeError| | ||
− | [[../../library/exceptions#UnicodeTranslateError| | ||
− | |||
− | [[../exceptions#unicodeexceptions| | ||
− | |||
− | |||
− | |||
− | |||
− | <p> | ||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_LookupError</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">name</span></span><span class="sig-paren">)</span><br /> | |
− | + | ||
− | < | + | : 查找注册在''name''下的错误处理回调函数。 作为特殊情况 <code>NULL</code> 可以传递,在这种情况下,“strict”的错误处理回调将被返回。 |
− | < | + | |
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_StrictErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> | |
− | + | ||
+ | : 提高 ''exc'' 作为例外。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_IgnoreErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> | ||
+ | |||
+ | : 忽略 unicode 错误,跳过错误的输入。 | ||
+ | |||
+ | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_ReplaceErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> | ||
− | < | + | : 将 unicode 编码错误替换为 <code>?</code> 或 <code>U+FFFD</code>。 |
− | < | ||
− | |||
− | |||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_XMLCharRefReplaceErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | < | ||
− | < | ||
− | + | : 用 XML 字符引用替换 unicode 编码错误。 | |
− | |||
− | |||
− | |||
− | + | ; [[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_BackslashReplaceErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> | |
− | |||
− | < | ||
− | < | ||
− | + | : 将 unicode 编码错误替换为反斜杠转义(<code>\x</code>、<code>\u</code> 和 <code>\U</code>)。 | |
− | |||
− | |||
− | |||
− | <code>\U</code> | ||
<dl> | <dl> | ||
− | <dt>[[../structures#c|PyObject]] *< | + | <dt>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">PyCodec_NameReplaceErrors</span></span></span><span class="sig-paren">(</span>[[../structures#c|<span class="n"><span class="pre">PyObject</span></span>]]<span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">exc</span></span><span class="sig-paren">)</span><br /> |
− | <dd><p> | + | </dt> |
− | + | <dd><p>用 <code>\N{...}</code> 转义替换 unicode 编码错误。</p> | |
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.5 | + | <p><span class="versionmodified added">3.5 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
第138行: | 第106行: | ||
</div> | </div> | ||
+ | |||
+ | </div> | ||
+ | <div class="clearer"> | ||
+ | |||
+ | |||
</div> | </div> | ||
− | [[Category:Python 3.9 | + | [[Category:Python 3.9 文档]] |
2021年10月31日 (日) 04:50的最新版本
编解码器注册和支持功能
- int PyCodec_Register(PyObject *search_function)
注册新的编解码器搜索功能。
作为副作用,这会尝试加载
encodings
包(如果尚未完成),以确保它始终位于搜索功能列表中的第一个位置。
- int PyCodec_KnownEncoding(const char *encoding)
- 返回
1
或0
,具体取决于是否为给定的 encoding 注册了编解码器。 此功能总是成功。
- PyObject *PyCodec_Encode(PyObject *object, const char *encoding, const char *errors)
基于通用编解码器的编码 API。
object 使用由 errors 定义的错误处理方法,通过为给定的 encoding 找到的编码器函数传递。 errors 可能是
NULL
以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 LookupError。
- PyObject *PyCodec_Decode(PyObject *object, const char *encoding, const char *errors)
基于通用编解码器的解码 API。
object 使用由 errors 定义的错误处理方法,通过为给定的 encoding 找到的解码器函数传递。 errors 可能是
NULL
以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 LookupError。
编解码器查找 API
在以下函数中,encoding 字符串被查找转换为所有小写字符,这使得通过该机制查找的编码有效地不区分大小写。 如果未找到编解码器,则设置 KeyError 并返回 NULL
。
- PyObject *PyCodec_Encoder(const char *encoding)
- 获取给定 encoding 的编码器函数。
- PyObject *PyCodec_Decoder(const char *encoding)
- 获取给定 encoding 的解码器函数。
- PyObject *PyCodec_IncrementalEncoder(const char *encoding, const char *errors)
- 获取给定 encoding 的 IncrementalEncoder 对象。
- PyObject *PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
- 获取给定 encoding 的 IncrementalDecoder 对象。
- 获取给定 编码 的 StreamReader 工厂函数。
- 获取给定 编码 的 StreamWriter 工厂函数。
用于 Unicode 编码错误处理程序的注册表 API
- int PyCodec_RegisterError(const char *name, PyObject *error)
在给定的 name 下注册错误处理回调函数 error。 当编解码器遇到不可编码的字符/不可解码的字节并且在调用编码/解码函数时将 name 指定为错误参数时,该回调函数将被编解码器调用。
回调获取一个参数,一个 UnicodeEncodeError、UnicodeDecodeError 或 UnicodeTranslateError 的实例,其中包含有关有问题的字符或字节序列及其在原始文件中的偏移量的信息字符串(有关提取此信息的函数,请参阅 Unicode 异常对象 )。 回调必须要么引发给定的异常,要么返回一个包含有问题序列的替换的二项元组,以及一个整数,给出原始字符串中应恢复编码/解码的偏移量。
成功返回
0
,错误返回-1
。
- PyObject *PyCodec_LookupError(const char *name)
- 查找注册在name下的错误处理回调函数。 作为特殊情况
NULL
可以传递,在这种情况下,“strict”的错误处理回调将被返回。
- 提高 exc 作为例外。
- 忽略 unicode 错误,跳过错误的输入。
- 将 unicode 编码错误替换为
?
或U+FFFD
。
- 用 XML 字符引用替换 unicode 编码错误。
- 将 unicode 编码错误替换为反斜杠转义(
\x
、\u
和\U
)。