4

わかりません:

'ô TRAM'.upper() != 'Ô TRAM'
'ô TRAM'.upper() == 'ô TRAM'

すべてのテキスト エディタ (vimおよびを含むemacs) は、大文字を要求すると、'ô TRAM'.upper() を 'Ô TRAM' に変換します。Python が [a-zA-Z] 文字のみを大文字にしているように見えるのはなぜですか? そして、回避策は何ですか?

4

3 に答える 3

10

デフォルトで Unicode を使用する Python 3 では、動作するはずです。

Python 2 では、強制する必要があります。これでうまくいきます。

u'ô TRAM'.upper()

uテキストが ASCII に変換されないようにします。(ユニコードのまま)

于 2013-03-19T07:58:03.763 に答える
4

@Thanakon が簡単に指摘したことは正しいです。Unicode Stringでこれを行うことができます。

ただし、Pythonが「狭い」文字列でこれを行わない理由を尋ねました。その理由は次のとおりです。Unicode は、メモリと処理の点で非常に大きなものです。それは決して些細なことではありませんUnicodeの定義またはICU ライブラリの実装を参照してください。

Python が考案された 90 年代初頭には、文字列の Unicode はまだ大きな問題ではありませんでした。Python コミュニティにとって、下位互換性は常に大きな懸念事項でした。したがって、一部の 2.x バージョンで「狭い文字列のユニコード大文字化」を行うことは非常に困難でした。

しかし、他の人々は 2000 年代にこの解決策に満足できなかったため、新しいデータ型を発明しましたunicode。そこにデータを入れると、本格的な Unicode 機能が得られます。あなたの便宜のために他のモジュールもあります...

ああ、ちなみに、あなたが示した狭い文字列は、ユニコード風に大文字にする前に、コードページで解釈する必要があります。ここに表示される文字列は、多くのエンコーディング解釈の1 つです (ISO-8859-1 かな?)

しかし、今は良いことです: Python 3では、後方互換性を壊す価値があると判断しました。デフォルトの文字列Unicode 文字列です。Python 3 で書く'hello'と、 Python 2 と同じですu'hello'。その上で、Unicode 機能を利用できます。

いずれにせよ、Python 2u'blah'または Python 3 では'blah'、python-file がUTF-8 (または同様のもの) で保存されていることを確認する必要があります。Python 3 では -files の標準エンコーディングです*.py。Python 2 では、ファイル エンコーディングを含むヘッダー行を追加 # -*- coding: utf-8 -*-するか、エディタでUTF-8 BOM マークを書き込む必要があります。

于 2013-03-19T08:40:30.427 に答える
3

質問に としてタグを付けunicodeましたが、文字列をユニコードにしたことはありません:

>>> print u'ô TRAM'.upper()
Ô TRAM
>>> print 'ô TRAM'.upper()
ô TRAM
于 2013-03-19T07:58:40.290 に答える