1.字符编码
1.1简介
字符编码只与文本文件和字符串有关。
字符编码:记录人类字符与二进制数的对应关系。 计算机只能识别二进制,但是通过字符编码可以展示出各式各样的语言字符。
1.2发展过程
1. 计算机是美国人发明的,为了能够让加计算机能够识别英文字符,制作了ASCII码。 ASCII码:记录了英文与二进制的对应关系,用一个字节来表示对应关系。 所有的字符都和符号不超过 127 个,之所以使用 8 位,是留后路。
2. 计算机普及世界,各国为了能使电脑能识别自己的语言字符,制作了不同的编码表。 GBK码:记录英文和中文与二进制的对应关系。 中文需要两个字节甚至更多。早期记录的对应关系少,现在,支持越来越多的生僻字。
3. 为了实现不同国家之间的文本数据能够彼此无障碍交流,多编码进行统一。 Unicode ( 万国码 ) 统一使用两个及以上记录字符与二进制数的对应关系。 utf8 ( 优化版 ) ,英文一个字节存储,中文三个及以上的字节存储。 * * 现在默认使用的是utf8 * *
1.3文件乱码问题
文件乱码是因为在存储文件所使用的编码,与打开文件的编码不一样导致。
文件以什么编码存储就要以什么编码打开。
1.4Python2中文报错
Python2 的诞生早于Unicode , Python2中使用的编码是ASCII码,编写代码后,
有中文字符时,运行会报错 . (SyntaxError : Non-ASCII character , 语法错误:非 ASCII 字符)
Python默认使用utf8 , 则不会出错。 解决方式:
在Python文件的顶部写上 ( 很多人喜欢写上 * * 装饰,就是好看,没什么实际的作用 ) :
# coding : utf8 < --- 称为‘头文件’
print ( u '你好' ) # 字符串前面写上u
str1 = u'你好'
print ( str1)
print ( type ( str1) )
2.编码与解码
2.1简述
编码:将人类能够理解的字符按照指定的编码转换为二进制数。
解码:将二进制按指定的编码转成人类能够理解的字符。
2.2Python编码解码
编码:
'' . encoding ( '编码格式' )
解码:
'' . decoding ( '解码格式' ) 注意点:
如果字符串只有字母和数据,可以在字符串的前面加上b进行转换。
str1 = 'hello word!'
str2 = 'hello word!123' print ( str1. encode( 'utf8' ) )
print ( str2. encode( 'utf8' ) ) str3 = '你好'
print ( str1. encode( 'utf8' ) )
str1 = '你好'
str2 = str1. encode( 'utf8' )
print ( str2)
print ( str2. decode( 'utf8' ) )
str1 = b'hao123'
print ( str1)
print ( type ( str1) )
2.3编码格式长度
编码转换为二进制的数据的时候 一个字节对应一个 \ x格式数据 .
len函数获取二进制的数据按 \ x格式数据计算数获取的就是字节的个数 .
str1 = '哈哈哈'
print ( len ( str1) )
str1 = '哈哈哈' . encode( 'utf8' )
print ( str1)
print ( len ( str1) )
3.Unicode编码
内存中的编码使用的Unicode , 无法设置 . 文本编辑器的存储编码可以修改 , 电脑显示编码可以修改 .
中国境内安装的windows系统的编码为GBK2312 .
3.1查看电脑默认编码
查看电脑系统的默认编码
1. win + r 启动运行
2. 输入cmd
3. 在终端输入chcp命令回车 C : \ Users \ 13600 > chcp
活动代码页 : 936
3.2代码页
代码页 国家(地区)或语言 437 美国 708 阿拉伯文(ASMO 708) 720 阿拉伯文(DOS) 850 多语言(拉丁文 I) 852 中欧(DOS) - 斯拉夫语(拉丁文 II) 855 西里尔文(俄语) 857 土耳其语 860 葡萄牙语 861 冰岛语 862 希伯来文(DOS) 863 加拿大 - 法语 865 日耳曼语 866 俄语 - 西里尔文(DOS) 869 现代希腊语 874 泰文(Windows) 932 日文(Shift-JIS) 936 中国 - 简体中文(GB2312) 949 韩文 950 繁体中文(Big5) 1200 Unicode 1201 Unicode (Big-Endian) 1250 中欧(Windows) 1251 西里尔文(Windows) 1252 西欧(Windows) 1253 希腊文(Windows) 1254 土耳其文(Windows) 1255 希伯来文(Windows) 1256 阿拉伯文(Windows) 1257 波罗的海文(Windows) 1258 越南文(Windows) 20866 西里尔文(KOI8-R) 21866 西里尔文(KOI8-U) 28592 中欧(ISO) 28593 拉丁文 3 (ISO) 28594 波罗的海文(ISO) 28595 西里尔文(ISO) 28596 阿拉伯文(ISO) 28597 希腊文(ISO) 28598 希伯来文(ISO-Visual) 38598 希伯来文(ISO-Logical) 50000 用户定义的 50001 自动选择 50220 日文(JIS) 50221 日文(JIS-允许一个字节的片假名) 50222 日文(JIS-允许一个字节的片假名 - SO/SI) 50225 韩文(ISO) 50932 日文(自动选择) 50949 韩文(自动选择) 51932 日文(EUC) 51949 韩文(EUC) 52936 简体中文(HZ) 65000 Unicode (UTF-7) 65001 Unicode (UTF-8)
3.3Python中Unicode对应的字符
Python3中只能到55296个字符(0 - 55295)。
其中常用:
0-9: 48-57
A-Z: 65-90
a-z: 95-122Unicode编码转换:http://tool.chinaz.com/tools/unicode.aspx
for i in range ( 55296 ) : print ( '%c' % i, end= ' ' ) if i % 100 == 0 : print ( )
十进制 十六进制 字符数 编码分类(中文) 编码分类(英文) 起始 终止 起始 终止 (个) 0 127 0000 007F 128 C0控制符及基本拉丁文 C0 Control and Basic Latin 128 255 0080 00FF 128 C1控制符及拉丁文补充-1 C1 Control and Latin 1 Supplement 256 383 0100 017F 128 拉丁文扩展-A Latin Extended-A 384 591 0180 024F 208 拉丁文扩展-B Latin Extended-B 592 687 0250 02AF 96 国际音标扩展 IPA Extensions 688 767 02B0 02FF 80 空白修饰字母 Spacing Modifiers 768 879 0300 036F 112 结合用读音符号 Combining Diacritics Marks 880 1023 0370 03FF 144 希腊文及科普特文 Greek and Coptic 1024 1279 0400 04FF 256 西里尔字母 Cyrillic 1280 1327 0500 052F 48 西里尔字母补充 Cyrillic Supplement 1328 1423 0530 058F 96 亚美尼亚语 Armenian 1424 1535 0590 05FF 112 希伯来文 Hebrew 1536 1791 0600 06FF 256 阿拉伯文 Arabic 1792 1871 0700 074F 80 叙利亚文 Syriac 1872 1919 0750 077F 48 阿拉伯文补充 Arabic Supplement 1920 1983 0780 07BF 64 马尔代夫语 Thaana 1984 2047 07C0 07FF 64 西非書面語言 N’Ko 2048 2143 0800 085F 96 阿维斯塔语及巴列维语 Avestan and Pahlavi 2144 2175 0860 087F 32 Mandaic Mandaic 2176 2223 0880 08AF 48 撒马利亚语 Samaritan 2304 2431 0900 097F 128 天城文书 Devanagari 2432 2559 0980 09FF 128 孟加拉语 Bengali 2560 2687 0A00 0A7F 128 锡克教文 Gurmukhi 2688 2815 0A80 0AFF 128 古吉拉特文 Gujarati 2816 2943 0B00 0B7F 128 奥里亚文 Oriya 2944 3071 0B80 0BFF 128 泰米尔文 Tamil 3072 3199 0C00 0C7F 128 泰卢固文 Telugu 3200 3327 0C80 0CFF 128 卡纳达文 Kannada 3328 3455 0D00 0D7F 128 德拉维族语 Malayalam 3456 3583 0D80 0DFF 128 僧伽罗语 Sinhala 3584 3711 0E00 0E7F 128 泰文 Thai 3712 3839 0E80 0EFF 128 老挝文 Lao 3840 4095 0F00 0FFF 256 藏文 Tibetan 4096 4255 1000 109F 160 缅甸语 Myanmar 4256 4351 10A0 10FF 96 格鲁吉亚语 Georgian 4352 4607 1100 11FF 256 朝鲜文 Hangul Jamo 4608 4991 1200 137F 384 埃塞俄比亚语 Ethiopic 4992 5023 1380 139F 32 埃塞俄比亚语补充 Ethiopic Supplement 5024 5119 13A0 13FF 96 切罗基语 Cherokee 5120 5759 1400 167F 640 统一加拿大土著语音节 Unified Canadian Aboriginal Syllabics 5760 5791 1680 169F 32 欧甘字母 Ogham 5792 5887 16A0 16FF 96 如尼文 Runic 5888 5919 1700 171F 32 塔加拉语 Tagalog 5920 5951 1720 173F 32 Hanunóo Hanunóo 5952 5983 1740 175F 32 Buhid Buhid 5984 6015 1760 177F 32 Tagbanwa Tagbanwa 6016 6143 1780 17FF 128 高棉语 Khmer 6144 6319 1800 18AF 176 蒙古文 Mongolian 6320 6399 18B0 18FF 80 Cham Cham 6400 6479 1900 194F 80 Limbu Limbu 6480 6527 1950 197F 48 德宏泰语 Tai Le 6528 6623 1980 19DF 96 新傣仂语 New Tai Lue 6624 6655 19E0 19FF 32 高棉语记号 Kmer Symbols 6656 6687 1A00 1A1F 32 Buginese Buginese 6688 6751 1A20 1A5F 64 Batak Batak 6784 6895 1A80 1AEF 112 Lanna Lanna 6912 7039 1B00 1B7F 128 巴厘语 Balinese 7040 7088 1B80 1BB0 49 巽他语 Sundanese 7104 7167 1BC0 1BFF 64 Pahawh Hmong Pahawh Hmong 7168 7247 1C00 1C4F 80 雷布查语 Lepcha 7248 7295 1C50 1C7F 48 Ol Chiki Ol Chiki 7296 7391 1C80 1CDF 96 曼尼普尔语 Meithei/Manipuri 7424 7551 1D00 1D7F 128 语音学扩展 Phonetic Extensions 7552 7615 1D80 1DBF 64 语音学扩展补充 Phonetic Extensions Supplement 7616 7679 1DC0 1DFF 64 结合用读音符号补充 Combining Diacritics Marks Supplement 7680 7935 1E00 1EFF 256 拉丁文扩充附加 Latin Extended Additional 7936 8191 1F00 1FFF 256 希腊语扩充 Greek Extended 8192 8303 2000 206F 112 常用标点 General Punctuation 8304 8351 2070 209F 48 上标及下标 Superscripts and Subscripts 8352 8399 20A0 20CF 48 货币符号 Currency Symbols 8400 8447 20D0 20FF 48 组合用记号 Combining Diacritics Marks for Symbols 8448 8527 2100 214F 80 字母式符号 Letterlike Symbols 8528 8591 2150 218F 64 数字形式 Number Form 8592 8703 2190 21FF 112 箭头 Arrows 8704 8959 2200 22FF 256 数学运算符 Mathematical Operator 8960 9215 2300 23FF 256 杂项工业符号 Miscellaneous Technical 9216 9279 2400 243F 64 控制图片 Control Pictures 9280 9311 2440 245F 32 光学识别符 Optical Character Recognition 9312 9471 2460 24FF 160 封闭式字母数字 Enclosed Alphanumerics 9472 9599 2500 257F 128 制表符 Box Drawing 9600 9631 2580 259F 32 方块元素 Block Element 9632 9727 25A0 25FF 96 几何图形 Geometric Shapes 9728 9983 2600 26FF 256 杂项符号 Miscellaneous Symbols 9984 10175 2700 27BF 192 印刷符号 Dingbats 10176 10223 27C0 27EF 48 杂项数学符号-A Miscellaneous Mathematical Symbols-A 10224 10239 27F0 27FF 16 追加箭头-A Supplemental Arrows-A 10240 10495 2800 28FF 256 盲文点字模型 Braille Patterns 10496 10623 2900 297F 128 追加箭头-B Supplemental Arrows-B 10624 10751 2980 29FF 128 杂项数学符号-B Miscellaneous Mathematical Symbols-B 10752 11007 2A00 2AFF 256 追加数学运算符 Supplemental Mathematical Operator 11008 11263 2B00 2BFF 256 杂项符号和箭头 Miscellaneous Symbols and Arrows 11264 11359 2C00 2C5F 96 格拉哥里字母 Glagolitic 11360 11391 2C60 2C7F 32 拉丁文扩展-C Latin Extended-C 11392 11519 2C80 2CFF 128 古埃及语 Coptic 11520 11567 2D00 2D2F 48 格鲁吉亚语补充 Georgian Supplement 11568 11647 2D30 2D7F 80 提非纳文 Tifinagh 11648 11743 2D80 2DDF 96 埃塞俄比亚语扩展 Ethiopic Extended 11776 11903 2E00 2E7F 128 追加标点 Supplemental Punctuation 11904 12031 2E80 2EFF 128 CJK 部首补充 CJK Radicals Supplement 12032 12255 2F00 2FDF 224 康熙字典部首 Kangxi Radicals 12272 12287 2FF0 2FFF 16 表意文字描述符 Ideographic Description Characters 12288 12351 3000 303F 64 CJK 符号和标点 CJK Symbols and Punctuation 12352 12447 3040 309F 96 日文平假名 Hiragana 12448 12543 30A0 30FF 96 日文片假名 Katakana 12544 12591 3100 312F 48 注音字母 Bopomofo 12592 12687 3130 318F 96 朝鲜文兼容字母 Hangul Compatibility Jamo 12688 12703 3190 319F 16 象形字注释标志 Kanbun 12704 12735 31A0 31BF 32 注音字母扩展 Bopomofo Extended 12736 12783 31C0 31EF 48 CJK 笔画 CJK Strokes 12784 12799 31F0 31FF 16 日文片假名语音扩展 Katakana Phonetic Extensions 12800 13055 3200 32FF 256 封闭式 CJK 文字和月份 Enclosed CJK Letters and Months 13056 13311 3300 33FF 256 CJK 兼容 CJK Compatibility 13312 19903 3400 4DBF 6592 CJK 统一表意符号扩展 A CJK Unified Ideographs Extension A 19904 19967 4DC0 4DFF 64 易经六十四卦符号 Yijing Hexagrams Symbols 19968 40895 4E00 9FBF 20928 CJK 统一表意符号 CJK Unified Ideographs 40960 42127 A000 A48F 1168 彝文音节 Yi Syllables 42128 42191 A490 A4CF 64 彝文字根 Yi Radicals 42240 42527 A500 A61F 288 Vai Vai 42592 42751 A660 A6FF 160 统一加拿大土著语音节补充 Unified Canadian Aboriginal Syllabics Supplement 42752 42783 A700 A71F 32 声调修饰字母 Modifier Tone Letters 42784 43007 A720 A7FF 224 拉丁文扩展-D Latin Extended-D 43008 43055 A800 A82F 48 Syloti Nagri Syloti Nagri 43072 43135 A840 A87F 64 八思巴字 Phags-pa 43136 43231 A880 A8DF 96 Saurashtra Saurashtra 43264 43391 A900 A97F 128 爪哇语 Javanese 43392 43487 A980 A9DF 96 Chakma Chakma 43520 43583 AA00 AA3F 64 Varang Kshiti Varang Kshiti 43584 43631 AA40 AA6F 48 Sorang Sompeng Sorang Sompeng 43648 43743 AA80 AADF 96 Newari Newari 43776 43871 AB00 AB5F 96 越南傣语 Vi?t Thái 43904 43936 AB80 ABA0 33 Kayah Li Kayah Li 44032 55215 AC00 D7AF 11184 朝鲜文音节 Hangul Syllables 55296 56319 D800 DBFF 1024 High-half zone of UTF-16 High-half zone of UTF-16 56320 57343 DC00 DFFF 1024 Low-half zone of UTF-16 Low-half zone of UTF-16 57344 63743 E000 F8FF 6400 自行使用區域 Private Use Zone 63744 64255 F900 FAFF 512 CJK 兼容象形文字 CJK Compatibility Ideographs 64256 64335 FB00 FB4F 80 字母表達形式 Alphabetic Presentation Form 64336 65023 FB50 FDFF 688 阿拉伯表達形式A Arabic Presentation Form-A 65024 65039 FE00 FE0F 16 变量选择符 Variation Selector 65040 65055 FE10 FE1F 16 竖排形式 Vertical Forms 65056 65071 FE20 FE2F 16 组合用半符号 Combining Half Marks 65072 65103 FE30 FE4F 32 CJK 兼容形式 CJK Compatibility Forms 65104 65135 FE50 FE6F 32 小型变体形式 Small Form Variants 65136 65279 FE70 FEFF 144 阿拉伯表達形式B Arabic Presentation Form-B 65280 65519 FF00 FFEF 240 半型及全型形式 Halfwidth and Fullwidth Form 65520 65535 FFF0 FFFF 16 特殊 Specials