--Überprüfen Sie den Vorgang mit Ihrem macOS
with open('utf-8.txt', mode='r') as fp:
text = fp.read()
locale.getpreferredencoding
verwendete Zeichenkodierung überprüfen.
>> import locale
>> locale.getpreferredencoding()
UTF-8
setlocale
, um LC_CTYPE
vorübergehend zu ändern
import locale
locale.setlocale(locale.LC_CTYPE, ('C'))
print(locale.getpreferredencoding(False)) # => US-Werden Sie ASCII
with open('hoge.txt') as fp:
text = fp.read()
Ergebnis
US-ASCII
Traceback (most recent call last):
File "test.py", line 7, in <module>
text = fp.read()
File "/path/to/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
UnicodeDecodeError
.Memo
-LC ohne Setloacale_Das gleiche Verhalten kann durch direktes Ändern der Umgebungsvariablen CTYPE bestätigt werden.
- getpreferredencoding(do_setloacal=False)Andernfalls konnte die vorübergehend geänderte Codierung mit setlocale nicht abgerufen werden.
open
jetzt das Argument encoding
akzeptieren, sodass Sie es verwenden können (Sie können Dateien unabhängig von = LC_CTYPE
verarbeiten).with open('utf-8.txt', encoding='utf-8') as fp:
text = fp.read()
#! -*- coding:utf-8 -*-
import locale
import codecs
import six
locale.setlocale(locale.LC_CTYPE, ('C'))
with open('utf-8.txt', 'rb') as fp:
text1 = fp.read()
text1 = six.text_type(text1, 'utf-8')
with codecs.open('utf-8.txt', 'r', encoding='utf-8') as fp:
text2 = fp.read()
assert text1 == text2
--Python3 bestimmt die Standardzeichencodierung beim Umgang mit Dateien in Abhängigkeit vom Betriebssystem und dem Gebietsschema (LC_CTYPE)
Recommended Posts