python – 处理包含多个字符编码的字符串

python – 处理包含多个字符编码的字符串,第1张

概述我不完全确定如何问这个问题,而且我没有找到答案,所以我希望有人可以帮助我. 我正在编写一个连接到远程主机的Python应用程序,并接收返回的字节数据,我使用Python的内置结构模块进行打包.我的问题是字符,因为它们包含多个字符编码.这是一个这样一个字符串的例子: “^ LThis是一个例子^ Gstring与多个^ J字符编码” 使用特殊转义字符标记不同编码开始和结尾的位置: > ^ L – 我不完全确定如何问这个问题,而且我没有找到答案,所以我希望有人可以帮助我.

我正在编写一个连接到远程主机的Python应用程序,并接收返回的字节数据,我使用Python的内置结构模块进行打包.我的问题是字符串,因为它们包含多个字符编码.这是一个这样一个字符串的例子:

“^ LThis是一个例子^ Gstring与多个^ J字符编码”

使用特殊转义字符标记不同编码开始和结尾的位置:

> ^ L – latin1
> ^ E – 中欧
> ^ T – 土耳其语
> ^ B – 波罗的海
> ^ J – 日语
> ^ C – 西里尔文
> ^ G – 希腊语

等等…我需要一种方式将这种字符串转换为Unicode,但我真的不知道该怎么做.我已经阅读了Python的编解码器和string.encode / decode,但我真的不是更聪明.我也应该提到,我无法控制主机输出的字符串.

我希望有人可以帮助我如何开始这个.

解决方法 没有内置的功能来解码这样的字符串,因为它是真正的自己的定制编解码器.您只需要分割这些控制字符上的字符串并相应地进行解码.

这是一个(非常慢)的例子,这个函数可以处理latin1和shift-JIS:

latin1 = "latin-1"japanese = "Shift-JIS"control_l = "\x0c"control_j = "\n"enCodingMap = {    control_l: latin1,control_j: japanese}def funkyDecode(s,initialCodec=latin1):    output = u""    accum = ""    currentCodec = initialCodec    for ch in s:        if ch in enCodingMap:            output += accum.decode(currentCodec)            currentCodec = enCodingMap[ch]            accum = ""        else:            accum += ch    output += accum.decode(currentCodec)    return output

更快的版本可能使用str.split或正则表达式.

(另外,在本例中可以看到,“^ J”是“换行符”的控制字符,所以输入的数据将会有一些有趣的限制.)

总结

以上是内存溢出为你收集整理的python – 处理包含多个字符编码的字符串全部内容,希望文章能够帮你解决python – 处理包含多个字符编码的字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存