本文将介绍获取Python可以编码为的所有编码的列表的详细情况,特别是关于python获取字符编码值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于
本文将介绍获取Python可以编码为的所有编码的列表的详细情况,特别是关于python 获取字符编码值的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Python 2与Python 3版本和编码的对比、python – 从5行中的列表列表中获取所有元素、python – 如何生成几个字母的所有可能排列的列表?、python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode的知识。
本文目录一览:- 获取Python可以编码为的所有编码的列表(python 获取字符编码值)
- Python 2与Python 3版本和编码的对比
- python – 从5行中的列表列表中获取所有元素
- python – 如何生成几个字母的所有可能排列的列表?
- python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode
获取Python可以编码为的所有编码的列表(python 获取字符编码值)
我正在编写一个脚本,尝试在Python 2.6中尝试将字节编码为许多不同的编码。有什么方法可以获取可供迭代的可用编码列表?
我尝试执行此操作的原因是因为用户的某些文本编码不正确。有有趣的人物。我知道将它弄乱的Unicode字符。我希望能够给他们一个答案,例如“您的文本编辑器将该字符串解释为X编码,而不是Y编码”。我以为我会尝试使用一种编码对该字符进行编码,然后使用另一种编码再次对其进行解码,然后看看我们是否得到相同的字符序列。
即是这样的:
for encoding1, encoding2 in itertools.permutation(encodinglist(), 2): try: unicode_string = my_unicode_character.encode(encoding1).decode(encoding2) except: pass
答案1
小编典典不幸的encodings.aliases.aliases.keys()
是,这不是一个适当的答案。
aliases
(正如一个人所期望的那样)包含几种情况,其中不同的键被映射到相同的值,例如1252
并且windows_1252
都被映射到cp1252
。如果不aliases.keys()
使用,可以节省时间set(aliases.values())
。
但是存在一个更糟糕的问题:aliases
不包含没有别名的编解码器(例如cp856,cp874,cp875,cp737和koi8_u)。
>>> from encodings.aliases import aliases>>> def find(q):... return [(k,v) for k, v in aliases.items() if q in k or q in v]...>>> find(''1252'') # multiple aliases[(''1252'', ''cp1252''), (''windows_1252'', ''cp1252'')]>>> find(''856'') # no codepage 856 in aliases[]>>> find(''koi8'') # no koi8_u in aliases[(''cskoi8r'', ''koi8_r'')]>>> ''x''.decode(''cp856'') # but cp856 is a valid codecu''x''>>> ''x''.decode(''koi8_u'') # but koi8_u is a valid codecu''x''>>>
另外值得一提的是,无论你获得的编解码器的完整列表,它可能是一个好主意,忽略/是不是编码解码字符集的编解码器,但做一些其他的改造如zlib
,quopri
和base64
。
这使我们想到了为什么要“尝试将字节编码为许多不同的编码”的问题。如果我们知道,我们也许可以引导您走向正确的方向。
首先,这是模棱两可的。一种将字节DE编码成unicode,另一种EN编码unicode成字节。您想做什么?
您真正要实现的目标是:您是否要确定要使用哪个编解码器来解码某些传入字节,并计划尝试使用所有可能的编解码器?[注意:latin1将解码任何内容]您是否正在尝试通过尝试使用所有可能的编解码器对其进行编码来确定某些unicode文本的语言?[注意:utf8将对任何内容进行编码]。
Python 2与Python 3版本和编码的对比
一、版本对比
首先要说的是,Python的版本,目前主要分为两大类:
Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.3。
Python 3.x的版本的,被称为python3:是最新的版本的,比如Python 3.1。长远来看,也算是以后的趋势。
【Python2和python3之间的区别】
1.从Python2到python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了
Python2和python3,在很多基本的,最常用的函数方面,接口都变了,最典型的就要数大家最常用的print函数了。
2.第三方库的支持方面,目前来说,还是Python2支持的最好,python3支持的不太够
Python强大的原因之一是第三方的库很多,功能很强大。
而目前很多Python的第三方的库,很多只提供Python2的。
或者是即使提供了python3的,但是也不一定很成熟。
二、编码对比
在 Python 中,不论是 Python2 还是 python3 中,总体上说,字符都只有两大类:
- 通用的 Unicode 字符;
- (unicode 被编码后的)某种编码类型的字符,比如 UTF-8,GBK 等类型的字符。
Python2 中字符的类型:
- str: 已经编码后的字节序列
- unicode: 编码前的文本字符
python3 中字符的类型:
- str: 编码过的 unicode 文本字符
- bytes: 编码前的字节序列
我们可以认为字符串有两种状态,即文本状态和字节(二进制)状态。Python2 和 python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。
在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建议对 str 使用 encode,对 unicode 使用 decode,这是 Python2 设计上的缺陷。python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。
Python2 的 str 和 unicode 都是 basestring 的子类,所以两者可以直接进行拼接操作。而 python3 中的 bytes 和 str 是两个独立的类型,两者不能进行拼接。
Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。
对于 str 为何种编码,有一些前提:
- Python 文件开始已经声明对应的编码
- Python 文件本身的确是使用该编码保存的
- 两者的编码类型要一样(比如都是 UTF-8 或者都是 GBK 等)
这样 Python 解析器才能正确的把文本解析为对应编码的 str。
总体来说,在 python3 中,字符编码问题得到了极大的优化,不再像 Python2 那么头疼。在 python3 中,文本总是 Unicode,由 str 类型进行表示,二进制数据使用 bytes 进行表示,不会将 str 与 bytes 偷偷的混在一起,使得两者的区别更加明显。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。
python – 从5行中的列表列表中获取所有元素
x = [['#','#','#'],['#','0',' ','#']]
假设我需要将其分成3行字符串,我该怎么做?
这是我如何做到这一点,但它不可扩展,说我有更多的列表,然后我将不得不写出这么多的打印声明.我想到了一个声明
print "".join(mlist[0]) print "".join(mlist[1]) print "".join(mlist[2])
我在想这样的东西,但它不起作用
zert = "" total = 0 for a in mlist: for b in a: if total < 6: print zert total = 0 zert = '' zert += b total += 1
^上面的问题是我需要保存第一个,然后迭代它,但只是检查是否没有内置函数?我试过”.join(mlist),但是它确实有效,因为它列表中的列表?
有更简单的方法吗?
解决方法
print '\n'.join([''.join(inner) for inner in mlist])
list comprehension创建每个嵌套列表的字符串,然后我们将新的行列表连接到带有换行符的更大字符串中.
演示:
>>> mlist = [['#','#']] >>> print '\n'.join([''.join(inner) for inner in mlist]) ##### #0 # ### #
您也可以使用for循环:
for inner in mlist: print ''.join(inner)
python – 如何生成几个字母的所有可能排列的列表?
> Randomize a string input into all possibilities 1个
所以我正在创建一个单词生成器,它接受几个输入的字母,将它们放在所有可能的位置,并将它们与文档匹配以查找单词.如果我接近这个错误请告诉我!如果不是我怎么能这样做?
谢谢
解决方法
import itertools for word in itertools.permutations( list_of_letters ): print ''.join(word)
python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode
今天关于获取Python可以编码为的所有编码的列表和python 获取字符编码值的讲解已经结束,谢谢您的阅读,如果想了解更多关于Python 2与Python 3版本和编码的对比、python – 从5行中的列表列表中获取所有元素、python – 如何生成几个字母的所有可能排列的列表?、python 乱码,python 编码,python 中文编码转换,python utf-8,python utf8,python unicode的相关知识,请在本站搜索。
本文标签: