使用不同长度字符的自定义Python字符串编解码器?

使用不同长度字符的自定义Python字符串编解码器?,python,character-encoding,Python,Character Encoding,是否可以使用纯Python代码生成自定义Python,其中该编解码器的字符可以是多个常规str或unicode字符,就像Python 2.x中的“unicode”编码一样,两个ASCII字符可以是一个unicode字符?(例如,如果“.”和“%”各为1个字符,则“%”中的“”将为false) 如果这是可能的,有没有办法让编解码器与所有字符串方法一起正常工作?(比如说 a = 'qwerty.uio%.p'.encode('aencoding') a.split('.'.encode('aenco

是否可以使用纯Python代码生成自定义Python,其中该编解码器的字符可以是多个常规
str
unicode
字符,就像Python 2.x中的“unicode”编码一样,两个ASCII字符可以是一个unicode字符?(例如,如果“.”和“%”各为1个字符,则“%”中的“
”将为false)

如果这是可能的,有没有办法让编解码器与所有字符串方法一起正常工作?(比如说

a = 'qwerty.uio%.p'.encode('aencoding')
a.split('.'.encode('aencoding'))

…将返回一个元组,其中包含
qwerty
uio%.p

您当然可以想出一种自定义编码,它使用多个字节来表示单个字符。UTF-8就是一个例子

Python
str
类型存储字节,不知道用于生成这些字节的编码方案。例如,UTF-8使用2个字节表示unicode字符
'\u00f1'

>>> s1 = u'\u00f1'.encode('utf-8')
>>> s1
'\xc3\xb1'
str
操作不知道字节
'\xc3\xb1'
表示单个字符:

>>> '\xc3' in s1
True
>>> s1.__contains__('\xc3')
True
在设计编码时,你可能会考虑一些问题:你需要编码多少个不同的符号?您的转义字符是否比
'%'
多?您只处理1字节和2字节序列吗

在不了解更多编码的情况下,我可以给你一个如何实现的示例。您可以将
str
表示转换为
unicode
,并使用其有效的方法来比较、拆分和连接您的值:

>>> s1 = '.'.decode('aencoding')
>>> s1
u'\u002e'
>>> s2 = 'x.y%.z'.decode('aencoding')
>>> s2
u'\u0078\u002e\u0079\u252e\u007a'
>>> s2.split(s1)
[u'x', u'y\u252ez'
>>> u'y\u252ez'.encode('aencoding')
'y%.z'

您还可以使用一个字节来表示多个字符的编码。