Python 2.7 でのエンコーディングについていくつか質問があります。
1.Pythonコードは次のとおりです。
#s = u"严"
s = u'\u4e25'
print 's is:', s
print 'len of s is:', len(s)
s1 = "a" + s
print 's1 is:', s1
print 'len of s1 is:', len(s1)
出力は次のとおりです。
s is: 严
len of s is: 1
s1 is: a严
len of s1 is: 2
なぜ lens
が 1 なのか、どうすれ4e25
ば 1 バイトに格納できるのか混乱していますか? また、USC-2 の長さが 2 バイトで、USC-4 の長さが 4 バイトであることにも気付きました。なぜ unicode strings
の長さが 1 なのですか?
2. (1) a.py
notepad++ (Windows 7) で名前を付けたファイルを新規作成し、ファイルのエンコーディングを設定しますANSI
。コードa.py
は次のとおりです。
# -*- encoding:utf-8 -*-
import sys
print sys.getdefaultencoding()
s = "严"
print "s:", s
print "type of s:", type(s)
出力は次のとおりです。
ascii
s: 严
type of s: <type 'str'>
(2) b.py
notepad++ (Windows 7) で名前を付けたファイルを新規作成し、ファイルのエンコーディングを設定しますUTF-8
。コードb.py
は次のとおりです。
# -*- encoding:gbk -*-
import sys
print sys.getdefaultencoding()
s = "严"
print "s:", s
print "type of s:", type(s)
出力は次のとおりです。
File "D:\pyws\code\\b.py", line 1
SyntaxError: encoding problem: utf-8
(3) 以下のようにファイルを変更b.py
します (ファイルのエンコーディング スタイルは ですUTF-8
):
import sys
print sys.getdefaultencoding()
s = "严"
print "s:", s
print "type of s:", type(s)
出力は次のとおりです。
ascii
s: 涓
type of s: <type 'str'>
(4) 以下のようにファイルを変更a.py
します (ファイルのエンコーディング スタイルは ですANSI
):
import sys
print sys.getdefaultencoding()
s = "严"
print "s:", s
print "type of s:", type(s)
出力は次のとおりです。
File "D:\pyws\code\a1.py", line 3
SyntaxError: Non-ASCII character '\xd1' in file D:\pyws\code\a1.py on
line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html f
or details
question2 のこれら 4 つのケースの出力が異なるのはなぜですか? 詳しく解る方いますか?