2011-01-17 8 views
1

拡張asciiを含む文字列を、指数値を保持したまま数を表すように秘密にする方法を教えてください。たとえば、文字列が 'm \ xb3/h'(1時間あたり立方メートルを表すことを意図している場合)の文字列 'm3/h'を返したいとします。または 'm \ xb2'は 'm2'を返します。テキストの保持で拡張Asciiを削除する

コード - 'M3/H' が所望されている間

varUnit = 'm\xb3/h' 
varUnit.decode('ascii', 'ignore').endcode('ascii') 
print varUnit 

戻る 'M/H'。

+1

これは常に事実であります間違ったことをする。 ASCIIの世界が完成しました。 Unicodeへようこそ! – tchrist

+1

Unicodeを使用してください。それは2011年です。 –

+1

@tchrist:残念ながら、ASCII以外のもの(または好きなコードページを超えたもの)を受け入れないレガシーシステムがたくさんあります。それは理想的ではありませんが、あなたがする必要がある状況がたくさんあります。 –

答えて

2

最初に知っておくべきことは、「拡張アスキー」がないことです。 Asciiはさまざまな方法で拡張されています。クイックテストでは、「latin_1」または「cp1252」が必要であることが示唆されています。だから、まず、ユニコード(すべてで任意の文字を格納する方法)に変換します

varUnit = varUnit.decode("latin_1") 

EDIT:あなただけの独自のアプリケーションでそれを表示したい場合、あなたはここで停止し、Unicodeを使用する必要があります。 print varUnitとします。しかし、レガシーシステムではそれを処理できない場合があります。

次に、純粋なASCIIで表現できる文字に簡略化する必要があります。最も簡単な方法は、unidecodeモジュールを使用することです(あなたはピップを使用してインストールすることができますかeasy_installを):

from unidecode import unidecode 
print unidecode(varUnit) 
1

上付き数字は、互換性の分解を持っているので、あなたが行うことができます。

>>> import unicodedata 
>>> unicodedata.normalize('NFKC', 'm²') 
'm2' 
+0

よくできました!⁠⁠⁠⁠⁠ – tchrist

関連する問題