8

ウムラウト付きの大文字を小文字に変換するのに問題があります。

print("ÄÖÜAOU".lower())

A、O、およびUは適切に変換されますが、Ä、Ö、およびÜは大文字のままです。何か案は?

最初の問題は.decode('utf-8')で修正されていますが、2番目の問題がまだあります。

# -*- coding: utf-8 -*-
original_message="ÄÜ".decode('utf-8')
original_message=original_message.lower()
original_message=original_message.replace("ä", "x")
print(original_message)

トレースバック(最後の最後の呼び出し):ファイル "Untitled.py"、4行目、original_message = original_message.replace( "ä"、 "x")UnicodeDecodeError:'ascii'コーデックは位置0のバイト0xc3をデコードできません:序数範囲外(128)

4

3 に答える 3

9

プレーン ASCII で作業している場合を除き、Unicode 文字列としてマークする必要があります。

> print(u"ÄÖÜAOU".lower())

äöüaou

変数を操作する場合も同じように機能します。最初に変数に割り当てられたタイプにすべて依存します。

> olle = "ÅÄÖABC"
> print(olle.lower())
ÅÄÖabc

> olle = u"ÅÄÖABC"
> print(olle.lower())
åäöabc
于 2013-02-24T14:47:48.520 に答える
3

Unicode テキストではなく、エンコードされた文字列を扱っています。

バイト文字列の.lower()メソッドは、ASCII 値のみを処理できます。文字列を Unicode にデコードするか、unicodeリテラル ( u'') を使用してから小文字にします。

>>> print u"\xc4AOU".lower()
äaou
于 2013-02-24T14:48:02.567 に答える
2

Python 2を使用しているが、すべての文字列にu ""のプレフィックスを付けたくない場合は、プログラムの先頭に次のように入力します。

from __future__ import unicode_literals
olle = "ÅÄÖABC"
print(olle.lower())

戻ります:

åäöabc

エンコーディングは、ディスクからプログラムに読み込まれた文字を解釈する方法を指定しますが、from __ future __ importステートメントは、プログラム自体の中でこれらの文字列を解釈する方法を示します。おそらく両方が必要になります。

于 2013-02-24T16:00:14.553 に答える