0

UTF-8、ASCII、および Unicode の違いを理解しようとしています。Unicode、UTF、ASCII、ANSI 形式の違いについては既に読みました。しかし、Python からエラーが発生しています。文字列がどのような形式であるかを確認する方法がわかりません。

例えば:

1# 'Klaus-Groth-Straße, Ballahausen'
2# 'Capit\xe1n\n'
3# u'Capit\xe1n\n'

だと思います

  • u'3# = ?による Unicode
  • 1#=?
  • 2#=?

私はすでに文字列 #1 をファイルに書き込もうとして、自分で小さな関数を書きました

def escape(html):
 html=html.replace('ö','ö')
 html=html.replace('Ö','Ö')
 html=html.replace('ä','ä')
 html=html.replace('Ä','Ä')
 html=html.replace('ü','ü')
 html=html.replace('Ü','Ü')
 html=html.replace('ß','ß')
 return html

文字列をtxtファイルに書き込む前に、文字を置き換えて、テキスト ファイルで正しいスペルを取得したいと考えています ( Klaus-Groth-Straße、Buchholz in der Nordheide )。

しかし、それは機能していません:/

私の 3 つの例が属する文字列の種類を教えてください - Unicode、ASCII、または UTF-8 ですか? txt#1 のような文字列を使用して、正しいスペルを a に書き込むにはどうすればよいでしょうか?

4

2 に答える 2

1

おっしゃるとおり、例 #3 は Unicode 文字列ですu。それが一番扱いやすいかも。

#1 と #2 は両方ともバイト文字列です。#1 は完全に ASCII 文字で構成されているため、Unicode エラーは発生しません。ただし、おそらく文字に変換したい HTML エンティティが含まれています。HTML エンティティを変換するにはさまざまな方法があります。質問Decoding HTML entities with Pythonを参照してください。結果は Unicode 文字列になります。

#2 には、ASCII 以外の文字が含まれていますが、Unicode でもありません。UTF-8 文字列の場合、少なくとも 2 つの 16 バイトが存在しますが、1 つしかありません。これは、他の文字エンコーディングの一部であり、作業する前にデコードする必要があることを意味します。Windows 1252 コード ページはおそらく適切な推測です。

>>> 'Capit\xe1n\n'.decode('cp1252')
u'Capit\xe1n\n'
>>> print 'Capit\xe1n\n'.decode('cp1252')
Capitán

ファイルに書き戻すときは、Unicode 文字列をバイト文字列に戻す必要があります。文字列のencodeメソッドでそれを行います。ファイルをどのエンコーディングにするかを決める必要があります。

f.write(u'Capit\xe1n\n'.encode('utf-8')

また

f.write(u'Capit\xe1n\n'.encode('cp1252')
于 2013-04-01T20:47:04.193 に答える