“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>
= Codec registry and support functions =
+
= 编解码器注册和支持功能 =
  
 
<dl>
 
<dl>
<dt>int <code>PyCodec_Register</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''search_function''<span class="sig-paren">)</span></dt>
+
<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>Register a new codec search function.</p>
+
</dt>
<p>As side effect, this tries to load the <code>encodings</code> package, if not yet
+
<dd><p>注册新的编解码器搜索功能。</p>
done, to make sure that it is always first in the list of search functions.</p></dd></dl>
+
<p>作为副作用,这会尝试加载 <code>encodings</code> 包(如果尚未完成),以确保它始终位于搜索功能列表中的第一个位置。</p></dd></dl>
  
; int <code>PyCodec_KnownEncoding</code><span class="sig-paren">(</span>''const'' char *''encoding''<span class="sig-paren">)</span>
+
; <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 />
: Return <code>1</code> or <code>0</code> depending on whether there is a registered codec for the given ''encoding''. This function always succeeds.
+
 
 +
: 返回 <code>1</code> <code>0</code>,具体取决于是否为给定的 ''encoding'' 注册了编解码器。 此功能总是成功。
  
 
<dl>
 
<dl>
<dt>[[../structures#c|PyObject]] *<code>PyCodec_Encode</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''object'', ''const'' char *''encoding'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
+
<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>''Return value: New reference.''</p>
+
</dt>
<p>Generic codec based encoding API.</p>
+
<dd><p>基于通用编解码器的编码 API。</p>
<p>''object'' is passed through the encoder function found for the given
+
<p>''object'' 使用由 ''errors'' 定义的错误处理方法,通过为给定的 ''encoding'' 找到的编码器函数传递。 ''errors'' 可能是 <code>NULL</code> 以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 [[../../library/exceptions#LookupError|LookupError]]</p></dd></dl>
''encoding'' using the error handling method defined by ''errors''. ''errors'' may
 
be <code>NULL</code> to use the default method defined for the codec. Raises a
 
[[../../library/exceptions#LookupError|<code>LookupError</code>]] if no encoder can be found.</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt>[[../structures#c|PyObject]] *<code>PyCodec_Decode</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''object'', ''const'' char *''encoding'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
+
<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>''Return value: New reference.''</p>
+
</dt>
<p>Generic codec based decoding API.</p>
+
<dd><p>基于通用编解码器的解码 API。</p>
<p>''object'' is passed through the decoder function found for the given
+
<p>''object'' 使用由 ''errors'' 定义的错误处理方法,通过为给定的 ''encoding'' 找到的解码器函数传递。 ''errors'' 可能是 <code>NULL</code> 以使用为编解码器定义的默认方法。 如果找不到编码器,则引发 [[../../library/exceptions#LookupError|LookupError]]</p></dd></dl>
''encoding'' using the error handling method defined by ''errors''. ''errors'' may
 
be <code>NULL</code> to use the default method defined for the codec. Raises a
 
[[../../library/exceptions#LookupError|<code>LookupError</code>]] if no encoder can be found.</p></dd></dl>
 
  
 
<div id="codec-lookup-api" class="section">
 
<div id="codec-lookup-api" class="section">
  
== Codec lookup API ==
+
== 编解码器查找 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 />
  
In the following functions, the ''encoding'' string is looked up converted to all
+
: 获取给定 ''encoding'' [[../../library/codecs#codecs|IncrementalEncoder]] 对象。
lower-case characters, which makes encodings looked up through this mechanism
 
effectively case-insensitive. If no codec is found, a [[../../library/exceptions#KeyError|<code>KeyError</code>]] is set
 
and <code>NULL</code> returned.
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_Encoder</code><span class="sig-paren">(</span>''const'' char *''encoding''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get an encoder function for the given ''encoding''.</p></dd></dl>
 
  
<dl>
+
: 获取给定 ''encoding'' 的 [[../../library/codecs#codecs|IncrementalDecoder]] 对象。
<dt>[[../structures#c|PyObject]] *<code>PyCodec_Decoder</code><span class="sig-paren">(</span>''const'' char *''encoding''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get a decoder function for the given ''encoding''.</p></dd></dl>
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_IncrementalEncoder</code><span class="sig-paren">(</span>''const'' char *''encoding'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get an [[../../library/codecs#codecs|<code>IncrementalEncoder</code>]] object for the given ''encoding''.</p></dd></dl>
 
  
<dl>
+
: 获取给定 ''编码'' [[../../library/codecs#codecs|StreamReader]] 工厂函数。
<dt>[[../structures#c|PyObject]] *<code>PyCodec_IncrementalDecoder</code><span class="sig-paren">(</span>''const'' char *''encoding'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get an [[../../library/codecs#codecs|<code>IncrementalDecoder</code>]] object for the given ''encoding''.</p></dd></dl>
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_StreamReader</code><span class="sig-paren">(</span>''const'' char *''encoding'', [[../structures#c|PyObject]] *''stream'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get a [[../../library/codecs#codecs|<code>StreamReader</code>]] factory function for the given ''encoding''.</p></dd></dl>
 
  
<dl>
+
: 获取给定 ''编码'' [[../../library/codecs#codecs|StreamWriter]] 工厂函数。
<dt>[[../structures#c|PyObject]] *<code>PyCodec_StreamWriter</code><span class="sig-paren">(</span>''const'' char *''encoding'', [[../structures#c|PyObject]] *''stream'', ''const'' char *''errors''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Get a [[../../library/codecs#codecs|<code>StreamWriter</code>]] factory function for the given ''encoding''.</p></dd></dl>
 
  
  
第74行: 第61行:
 
<div id="registry-api-for-unicode-encoding-error-handlers" class="section">
 
<div id="registry-api-for-unicode-encoding-error-handlers" class="section">
  
== Registry API for Unicode encoding error handlers ==
+
== 用于 Unicode 编码错误处理程序的注册表 API ==
  
 
<dl>
 
<dl>
<dt>int <code>PyCodec_RegisterError</code><span class="sig-paren">(</span>''const'' char *''name'', [[../structures#c|PyObject]] *''error''<span class="sig-paren">)</span></dt>
+
<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>Register the error handling callback function ''error'' under the given ''name''.
+
</dt>
This callback function will be called by a codec when it encounters
+
<dd><p>在给定的 ''name'' 下注册错误处理回调函数 ''error''。 当编解码器遇到不可编码的字符/不可解码的字节并且在调用编码/解码函数时将 ''name'' 指定为错误参数时,该回调函数将被编解码器调用。</p>
unencodable characters/undecodable bytes and ''name'' is specified as the error
+
<p>回调获取一个参数,一个 [[../../library/exceptions#UnicodeEncodeError|UnicodeEncodeError]][[../../library/exceptions#UnicodeDecodeError|UnicodeDecodeError]] [[../../library/exceptions#UnicodeTranslateError|UnicodeTranslateError]] 的实例,其中包含有关有问题的字符或字节序列及其在原始文件中的偏移量的信息字符串(有关提取此信息的函数,请参阅 [[../exceptions#unicodeexceptions|Unicode 异常对象]] )。 回调必须要么引发给定的异常,要么返回一个包含有问题序列的替换的二项元组,以及一个整数,给出原始字符串中应恢复编码/解码的偏移量。</p>
parameter in the call to the encode/decode function.</p>
+
<p>成功返回 <code>0</code>,错误返回 <code>-1</code></p></dd></dl>
<p>The callback gets a single argument, an instance of
 
[[../../library/exceptions#UnicodeEncodeError|<code>UnicodeEncodeError</code>]], [[../../library/exceptions#UnicodeDecodeError|<code>UnicodeDecodeError</code>]] or
 
[[../../library/exceptions#UnicodeTranslateError|<code>UnicodeTranslateError</code>]] that holds information about the problematic
 
sequence of characters or bytes and their offset in the original string (see
 
[[../exceptions#unicodeexceptions|<span class="std std-ref">Unicode Exception Objects</span>]] for functions to extract this information). The
 
callback must either raise the given exception, or return a two-item tuple
 
containing the replacement for the problematic sequence, and an integer
 
giving the offset in the original string at which encoding/decoding should be
 
resumed.</p>
 
<p>Return <code>0</code> on success, <code>-1</code> on error.</p></dd></dl>
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_LookupError</code><span class="sig-paren">(</span>''const'' char *''name''<span class="sig-paren">)</span></dt>
+
 
<dd><p>''Return value: New reference.''</p>
+
: 查找注册在''name''下的错误处理回调函数。 作为特殊情况 <code>NULL</code> 可以传递,在这种情况下,“strict”的错误处理回调将被返回。
<p>Lookup the error handling callback function registered under ''name''. As a
+
 
special case <code>NULL</code> can be passed, in which case the error handling callback
+
; [[../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 />
for &quot;strict&quot; will be returned.</p></dd></dl>
+
 
 +
: 提高 ''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 />
  
<dl>
+
: 将 unicode 编码错误替换为 <code>?</code> <code>U+FFFD</code>
<dt>[[../structures#c|PyObject]] *<code>PyCodec_StrictErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: Always NULL.''</p>
 
<p>Raise ''exc'' as an exception.</p></dd></dl>
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_IgnoreErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Ignore the unicode error, skipping the faulty input.</p></dd></dl>
 
  
<dl>
+
: 用 XML 字符引用替换 unicode 编码错误。
<dt>[[../structures#c|PyObject]] *<code>PyCodec_ReplaceErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Replace the unicode encode error with <code>?</code> or <code>U+FFFD</code>.</p></dd></dl>
 
  
<dl>
+
; [[../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 />
<dt>[[../structures#c|PyObject]] *<code>PyCodec_XMLCharRefReplaceErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Replace the unicode encode error with XML character references.</p></dd></dl>
 
  
<dl>
+
: unicode 编码错误替换为反斜杠转义(<code>\x</code><code>\u</code> <code>\U</code>)。
<dt>[[../structures#c|PyObject]] *<code>PyCodec_BackslashReplaceErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
 
<dd><p>''Return value: New reference.''</p>
 
<p>Replace the unicode encode error with backslash escapes (<code>\x</code>, <code>\u</code> and
 
<code>\U</code>).</p></dd></dl>
 
  
 
<dl>
 
<dl>
<dt>[[../structures#c|PyObject]] *<code>PyCodec_NameReplaceErrors</code><span class="sig-paren">(</span>[[../structures#c|PyObject]] *''exc''<span class="sig-paren">)</span></dt>
+
<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>''Return value: New reference.''</p>
+
</dt>
<p>Replace the unicode encode error with <code>\N{...}</code> escapes.</p>
+
<dd><p><code>\N{...}</code> 转义替换 unicode 编码错误。</p>
 
<div class="versionadded">
 
<div class="versionadded">
  
<p><span class="versionmodified added">3.5 新版功能.</span></p>
+
<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)
返回 10,具体取决于是否为给定的 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)
获取给定 encodingIncrementalEncoder 对象。
PyObject *PyCodec_IncrementalDecoder(const char *encoding, const char *errors)
获取给定 encodingIncrementalDecoder 对象。
PyObject *PyCodec_StreamReader(const char *encoding, PyObject *stream, const char *errors)
获取给定 编码StreamReader 工厂函数。
PyObject *PyCodec_StreamWriter(const char *encoding, PyObject *stream, const char *errors)
获取给定 编码StreamWriter 工厂函数。


用于 Unicode 编码错误处理程序的注册表 API

int PyCodec_RegisterError(const char *name, PyObject *error)

在给定的 name 下注册错误处理回调函数 error。 当编解码器遇到不可编码的字符/不可解码的字节并且在调用编码/解码函数时将 name 指定为错误参数时,该回调函数将被编解码器调用。

回调获取一个参数,一个 UnicodeEncodeErrorUnicodeDecodeErrorUnicodeTranslateError 的实例,其中包含有关有问题的字符或字节序列及其在原始文件中的偏移量的信息字符串(有关提取此信息的函数,请参阅 Unicode 异常对象 )。 回调必须要么引发给定的异常,要么返回一个包含有问题序列的替换的二项元组,以及一个整数,给出原始字符串中应恢复编码/解码的偏移量。

成功返回 0,错误返回 -1

PyObject *PyCodec_LookupError(const char *name)
查找注册在name下的错误处理回调函数。 作为特殊情况 NULL 可以传递,在这种情况下,“strict”的错误处理回调将被返回。
PyObject *PyCodec_StrictErrors(PyObject *exc)
提高 exc 作为例外。
PyObject *PyCodec_IgnoreErrors(PyObject *exc)
忽略 unicode 错误,跳过错误的输入。
PyObject *PyCodec_ReplaceErrors(PyObject *exc)
将 unicode 编码错误替换为 ?U+FFFD
PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
用 XML 字符引用替换 unicode 编码错误。
PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc)
将 unicode 编码错误替换为反斜杠转义(\x\u\U)。
PyObject *PyCodec_NameReplaceErrors(PyObject *exc)

\N{...} 转义替换 unicode 编码错误。

3.5 版中的新功能。