2017-12-05 18 views
1

> 128文字を含む標準文字列をUnicodeに変換しようとしています。例えば 、Python 2.7、(ord> 128)stringをユニコードに変換する方法

a='en métro' 
b=u'en métro' 
c = whatToDoWith(a) 

正確にタイプと値の両方で、bに等しく、cは私が得ることができるように。

txt = 'en métro'

utxt = txt.decode('utf8') 
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode 
return codecs.utf_8_decode(input, errors, True) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 3: invalid continuation byte 

を調べるためにするとき、私は、次のエラーを得た私の実際のプログラムでは、私はまた、次のテストコードがあります。

# -*- coding: utf-8 -*- 

c='en métro' 
print type(c) 
print c 
d=c.decode('utf8') 
print type(d) 
print d 
a='中文' 
print type(a) 
print a 
b=a.decode('utf8') 
print type(b) 
print b 

をし、今回の結果が予想されます。

<type 'str'> 
en métro 
<type 'unicode'> 
en métro 
<type 'str'> 
中文 
<type 'unicode'> 
中文 

私の実際のプログラムとは何が違うかは分かりません。私もそれに # -*- coding: utf-8 -*-行を持っています。

誰かが問題を指摘できますか?

答えて

0

str.decode()はほとんど間違いなく、あなたのケースで動作するはずです:

# coding=utf-8 

a = "en métro" 
b = u"en métro" 
c = a.decode("utf-8") 

print(type(a)) # <type 'str'> 
print(type(b)) # <type 'unicode'> 
print(type(c)) # <type 'unicode'> 

if b == c: 
    print("b equals c!") # hooray they are equal in value 

if type(b) == type(c): 
    print("b is the same type as c!") # hooray they are of equal type 
+0

ありがとうございました。私は同じ結果を得ることができますが、これは私の質問に答えることはできません。 – Charlie

+0

@Charlie - あなたの質問は私には分かりません。 – zwer

+0

詳細については、以下の別の回答を追加しました。 – Charlie

0

は、上記の答えをありがとう、私は同じ結果を得たが、これは私のtest.pyの作品が、私の本当のプログラムはdoesnの理由についての私の質問に答えませんでした」 t。

私はより多くの調査を行なったし、ファイルから読み込んだ文字列はインライン評価は異なっていることがわかった。

enter code here 

# -*- coding: utf-8 -*- 
c='en métro' 
print "c:" 
print type(c) 
print len(c) 
for x in c: 
    print ord(x) 
file = open('test.txt','r') 

e = file.read() 
print "\n\ne:" 
print type(e) 
print len(e) 
for x in e: 
    print ord(x) 
file.close() 

と私は結果だ:私はこれが理由であると信じて

c: 
<type 'str'> 
9 
101 
110 
32 
109 
195 
169 
116 
114 
111 


e: 
<type 'str'> 

101 
110 
32 
109 
233 
116 
114 
111 

を本当のプログラムで私の失敗を引き起こした。誰かがその理由と解決策を説明することはできますか?

関連する問題