[解決済み] Python インタープリタが文字列操作で非 ASCII 文字を正しく扱うようにするには?
質問
以下のような文字列があります。
6Â 918Â 417Â 712
この文字列を切り詰める明確な方法は(私がPythonを理解している限り)、単にこの文字列が
s
という変数に格納することです。
s.replace('Â ', '')
これでうまくいくはずです。しかし、もちろん、非ASCII文字である
'\xc2'
がエンコードされていないことを訴えます。
私は、異なるエンコーディングをどのように切り替えるか、全く理解できませんでした。
これは本当に上記のコードと同じですが、今は文脈上ではそうなっています。ファイルはメモ帳に UTF-8 として保存され、次のヘッダーがあります。
#!/usr/bin/python2.4
# -*- coding: utf-8 -*-
コードです。
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
s = soup.find('div', {'id':'main_count'})
#making a print 's' here goes well. it shows 6Â 918Â 417Â 712
s.replace('Â ','')
save_main_count(s)
よりも先に進みません。
s.replace
...
どのように解決するのですか?
Python 2 は
ascii
をソースファイルのデフォルトエンコーディングとして使用します。つまり、リテラルで非アスキーユニコード文字を使用するには、ファイルの先頭で別のエンコーディングを指定する必要があります。Python 3 では
utf-8
をソースファイルのデフォルトエンコーディングとして使用するので、これはあまり問題ではありません。
参照してください。 http://docs.python.org/tutorial/interpreter.html#source-code-encoding
utf-8のソースエンコーディングを有効にするには、上の2行のうちの1行に記述します。
# -*- coding: utf-8 -*-
上記はdocsにありますが、こちらも動作します。
# coding: utf-8
追加の考慮事項
-
ソースファイルは、テキストエディタでも正しいエンコーディングで保存する必要があります。
-
Python 2 では、ユニコード・リテラルには
u
のように、その前にs.replace(u"Â ", u"")
しかし、Python 3では、単に引用符を使用します。Python 2ではfrom __future__ import unicode_literals
を使って Python 3 の動作を得ることができますが、これは現在のモジュール全体に影響することに注意してください。 -
s.replace(u"Â ", u"")
はまた、以下の場合にも失敗します。s
がユニコード文字列でない場合も失敗します。 -
string.replace
は新しい文字列を返し、その場では編集しないので、戻り値も確認してください。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] 文字列が空かどうかを確認する方法は?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] 文字のASCII値を取得する方法
-
[解決済み】ASCII以外の文字をすべてgrepする方法とは?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非ASCII文字を半角スペースで置換する方法
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] if 節の終了方法