2016-08-14 8 views
-1

システムは私の制御下にないlatin-1エンコード文字列(Ölandなど)を送信します。utf-8に変換できますが、latin-1には戻れません。 文字列をLatin-1からUTF-8に変換してからLatin-1に戻します。

Öland 
b'\xd6land' 

は今、どのように私はシステムを模倣する

text = '\xc3\x96land' # This is what the external system sends 
iso = text.encode(encoding='latin-1') # this is my best guess 
print(iso.decode('utf-8')) 
print(u"Öland".encode(encoding='latin-1')) 


これは、出力は次のとおりです。

は、このコードを考えてみましょうか?お使いの外部システムは、あなたが最初にそれをエンコードとして送信されるので、それをコードするのではなく、それをデコードしなければならないあなたにそれを送信した場合 は明らか '\xc3\x96land''\xd6land'

+0

入力はLatin-1ですか。 "Ö"はエンコードに2バイト必要はありません。実際に0xD6は正しく見える:https://de.wikipedia.org/wiki/ISO_8859-1 – Thilo

+0

正直なところいいえ。ラテン1はちょうど私の最高の推測です。 – Tomek

+1

あなたの入力はすでにUTF-8ですか? 'Ö\t c3 96 \t大文字の大文字の文字 ' – Thilo

答えて

0

ではありません。

エンコードする必要はありません!

hey=u"Öland".encode('latin-1') print hey

この?land

print hey.decode('latin-1') のような出力を提供します。このÖland

0

のような出力を与える外部のシステムがすでにUTF-8にデータを送信判明。 前後に文字列を変換すると、次のように動作します:

#!/usr/bin/env python3.4 
# -*- coding: utf-8 -*- 

text = '\xc3\x96land' 
encoded = text.encode(encoding='raw_unicode_escape') 
print(encoded) 
utf8 = encoded.decode('utf-8') 
print(utf8) 

mimic = utf8.encode('utf-8', 'unicode_escape') 
print(mimic) 

と出力

 
b'\xc3\x96land' 
Öland 
b'\xc3\x96land' 

をご支援いただきありがとうございます!

関連する問題