亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4250 | 回復(fù): 0
打印 上一主題 下一主題

python在pydev,IDLE,命令行出現(xiàn)亂碼的原因及解決 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-05-10 14:00 |只看該作者 |倒序?yàn)g覽
  1. #! /usr/bin/env python

  2. # -*- coding: utf-8 -*-

  3. #@author zcwang3@gmail.com

  4. #@version 2010-09-07 11:22

  5.   

  6. # 原始字符串

  7. rstr = r " 編碼 "

  8. # 普通字符串

  9. str = " 編碼 "

  10. #Unicode 字符串

  11. ustr = u " 編碼 "

  12. # 用 utf-8 編碼把 str 轉(zhuǎn)換為 unicode

  13. utf8ToUnicodeStr=str.decode( 'utf-8' )

  14. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果: UnicodeDecodeError( 命令行中默認(rèn)使用的是 windows 系統(tǒng)的 gbk 編碼, str 就是使用 gbk 編碼的字符串,使用 utf-8 解碼時(shí)部分字節(jié)值超出 utf-8 范圍,系統(tǒng)錯(cuò)誤 )

  15. # 用 gbk 編碼把 str 轉(zhuǎn)換為 unicode

  16. gbkToUnicodeStr=str.decode( 'gbk' )

  17.   

  18. rstr

  19. str

  20. ustr

  21. utf8ToUnicodeStr

  22. gbkToUnicodeStr

  23. print len(rstr)

  24. 在 pydev 中的運(yùn)行結(jié)果: 6 (顯示:文件頭部聲明的 utf-8 編碼起作用,并且 1 個(gè)漢字占 3 位)

  25. 在 IDLE 中的運(yùn)行結(jié)果: 6 (顯示:文件頭部聲明的 utf-8 編碼起作用,并且 1 個(gè)漢字占 3 位)

  26. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果: 4 (顯示:命令行中默認(rèn)編碼 gbk , 1 個(gè)漢字占 3 位 )

  27. print len(str)

  28. 在 pydev 中的運(yùn)行結(jié)果: 6

  29. 在 IDLE 中的運(yùn)行結(jié)果: 6

  30. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果: 4

  31. 原始字符串和普通字符串有相同的結(jié)果

  32. print len(ustr)

  33. 在 pydev 中的運(yùn)行結(jié)果: 2

  34. 在 IDLE 中的運(yùn)行結(jié)果: 2

  35. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果: 2

  36. 通過使用 u 來標(biāo)志的 unicode 字符在 3 種情況下結(jié)果一致, 1 個(gè)漢字占 2 位

  37. print len(utf8ToUnicodeStr)

  38. 在 pydev 中的運(yùn)行結(jié)果: 2 (通過正確的編碼,轉(zhuǎn)換成相應(yīng)的 unicode 字符串)

  39. 在 IDLE 中的運(yùn)行結(jié)果: 2 (通過正確的編碼,轉(zhuǎn)換成相應(yīng)的 unicode 字符串)

  40. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果:變量未定義

  41. print len(gbkToUnicodeStr)

  42. 在 pydev 中的運(yùn)行結(jié)果: 3 ( utf-8 聲明的字符串,用 gbk 解碼,結(jié)果是亂碼)

  43. 在 IDLE 中的運(yùn)行結(jié)果: 3

  44. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中的運(yùn)行結(jié)果: 2

  45.   

  46. print rstr

  47. print str

  48. print ustr

  49. print utf8ToUnicodeStr

  50. print gbkToUnicodeStr

  51.   

  52. 在 IDLE 中的運(yùn)行結(jié)果和通過 python + py 文件的運(yùn)行結(jié)果完全一致!

  53.   

  54. Pydev 中模塊的默認(rèn)編碼在文件頭聲明(沒有聲明就是 ascii ),控制臺(tái)顯示的默認(rèn)編碼和 文件頭聲明的編碼 一致

  55. IDLE 中調(diào)用時(shí)模塊的默認(rèn)編碼在文件頭聲明(沒有聲明就是 ascii ),控制臺(tái)顯示的默認(rèn)編碼和 操作系統(tǒng)默認(rèn)編碼一致(如中文 windows 下的 gbk ) 一致

  56. 粘貼到 CMD 啟動(dòng)的 PYTHON 命令行中,直接聲明的字符串的默認(rèn)編碼和命令行中顯示的默認(rèn)編碼都是 操作系統(tǒng)默認(rèn)編碼一致(如中文 windows 下的 gbk )

  57.   

  58. 結(jié)論:

  59. 1, 亂碼,編碼錯(cuò)誤出現(xiàn)的原因:字符串 str 聲明時(shí)編碼為 a ,而輸出(控制臺(tái)顯示或者寫入文件,數(shù)據(jù)庫等)時(shí)由于環(huán)境的不同,默認(rèn)編碼也不同。在不同的環(huán)境下, python 會(huì)根據(jù)各自的默認(rèn)編碼去解碼字符串 a ,因此 出現(xiàn)亂碼( str 對(duì)應(yīng)的 a 編碼的值正好都在 b 編碼的取值范圍內(nèi)) 或者 編碼錯(cuò)誤(譬如: a 編碼中有值 10000 ( 2 進(jìn)制的形式),但是 b 編碼的取值范圍不包括 10000 ,就會(huì)出現(xiàn)轉(zhuǎn)換錯(cuò)誤)

  60. 2, 如果變量直接聲明為 Unicode 字符,那么在不同輸出環(huán)境時(shí), python 都能正常地轉(zhuǎn)換為相應(yīng)的字符串

  61. 3, 通過 u 符號(hào)聲明的 Unicode 字符串在上述 3 種情況下都不出現(xiàn)亂碼, 推薦使用

  62. 4, 原始字符串和普通字符串聲明的字符串的默認(rèn)編碼跟系統(tǒng)環(huán)境相關(guān), python 命令行中默認(rèn)的是操作系統(tǒng)的編碼如 windows 的 gbk , pydev 或者 idle 中,字符串的默認(rèn)編碼跟文件頭部聲明的編碼一致(如果文件頭部沒有聲明,那么默認(rèn)的是 ascii 編碼)
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP