python2.7 編碼問題解析(四) open與編碼的關係
阿新 • • 發佈:2019-01-09
import sys, locale def SysCoding(): fmt = '{0}: {1}' #當前系統所使用的預設字元編碼 print fmt.format('DefaultEncoding ', sys.getdefaultencoding()) #轉換Unicode檔名至系統檔名時所用的編碼('None'表示使用系統預設編碼) print fmt.format('FileSystemEncoding ', sys.getfilesystemencoding()) #預設的區域設定並返回元祖(語言, 編碼) print fmt.format('DefaultLocale ', locale.getdefaultlocale()) #使用者首選的文字資料編碼(猜測結果) print fmt.format('PreferredEncoding ', locale.getpreferredencoding()) #直譯器Shell標準輸入字元編碼 print fmt.format('StdinEncoding ', sys.stdin.encoding) #直譯器Shell標準輸出字元編碼 print fmt.format('StdoutEncoding ', sys.stdout.encoding) SysCoding()
(程式碼來自http://www.cnblogs.com/tester-l/p/6056077.html)
以上程式碼可以測試系統中有關編碼的設定,其中sys.getfilesystemencoding()
這個是和開啟檔案相關的,我係統給出的檔案系統名所用的編碼是:FileSystemEncoding : mbcs
實際上在http://www.cnblogs.com/tester-l/p/6056077.html中,人家說的已經很清楚。
在開啟檔案的時候,檔案路徑的編碼需要和系統相關的。
兩種編碼都能正確的開啟檔案,我覺得還是根據檔案系統的編碼開啟是比較合適的。#-*-coding:utf8-*- dir1 = "測試.txt" #file = open(dir1) dir2 = "測試.txt".decode('utf8') file = open(dir2) print "2" + file.readline() file.close() dir3 = "測試.txt".decode('utf8').encode('mbcs') file = open(dir3) print "3" + file.readline() print [dir2] print [dir3]
windows中內碼表和通用編碼標準的對應表:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
936 | gb2312 | ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312) |
65001 | utf-8 | Unicode (UTF-8) |