1. 程式人生 > >python2.7 編碼問題解析(四) open與編碼的關係

python2.7 編碼問題解析(四) open與編碼的關係

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)