タグ

PythonとUnicodeに関するAutomatorのブックマーク (5)

  • pythonの正規表現で日本語を扱う – taichino.com

    先日、正規表現が使えるようになってきたと書いたものの、今まで日語に対して正規表現を使うのは、どうせ上手く動かないだろうという様な先入観で使っていなかったのですが、調べてみるとただのわず嫌いだった事が解りました。 利用シーンは色々考えられると思うのですが、例えば日語文書中の単位付き数詞(100g、20個等)から数値と単位を両方抜き出すという処理を考えます。折角なので数値・単位共に半角全角文字がどちらも使われていて、正規表現が使いにくそうな状況を想定します。結論から言うとunicode文字列を使えばこのような状況でも上手く正規表現を使う事が出来ます。 使い方は簡単でパターンと検索対象の文字列をunicodeで用意し、searchやmatch等を呼ぶ際にunicodeフラグを指定すればOKです。unicodeフラグは省略形のre.Uも用意されています。先ほど想定した問題に対する正規表現を書

  • Python bite: 文字集合非対応文字の変換 | Inside ASCADE

    Python 自体に咬まれたわけではないですが、 Python での実装中の話なので Python bite の括りで書きます。 入出力の文字集合体系(所謂「文字コード」) が一致している場合は問題無いのですが、 これらが一致していない場合、 出力文字コードが対応していない文字が入力に含まれていると咬まれます。 例えば Unicode の入力をベースに Shift_JIS の出力を生成するような場合、 '\uFF5E'(所謂「全角チルダ」)のような文字が使用されていると、 変換に失敗します。 % python > import codecs > import sys > sys.stdout = codecs.getwriter('shift_jis')(sys.stdout) > print u'\uff5e' Traceback (most recent call last): Fil

  • Unicodeの「横棒」文字 - 今川館

    [日語の横棒記号に絶望した] http://taichino.com/programming/1384 [従来の文字コードとUnicodeの対応に関する諸問題] http://euc.jp/i18n/ucsnote.ja.html ↑Unicodeでは横棒文字がたくさん定義されている。 しかし、人が画面に入力する横棒なんて、見た目が同じならどれを使っていてもどうでもいいので、分けられるとプログラムが面倒になるという話。 一応、上記リンクから半角文字以外を抜き出したのが以下の変数。 KANA_DASH_PATTERN = ( ur'\u2010' ur'\u2011' ur'\u2012' ur'\u2013' ur'\u2014' ur'\u2015' ur'\u207b' ur'\u208b' ur'\u2212' ur'\u30fc' ur'\uff0d' ur'\uff70' ur

    Unicodeの「横棒」文字 - 今川館
  • #06 文字コードのバッドノウハウ[最終回] | gihyo.jp

    ソフトウェアなどを使いこなすために、ストレスを感じながらもしぶしぶ覚えなければならないようなノウハウ、「⁠バッドノウハウ」がテーマの連載、最終回の今回は文字コードのBKを取り上げたいと思います。 文字コードとバッドノウハウ 文字コードは、Web開発を行う上で避けては通れない分野です。文字化けを起こさずに、コンテンツをブラウザに正しく表示させることはWeb開発の基といえます。 しかしながら、文字コードには歴史的な紆余曲折がいろいろあり、膨大なバッドノウハウが人類の英知として蓄積されています。今回は、その膨大なるBKの一部を紹介したいと思います。 機種依存文字は滅びず 文字コードのBKといえば、機種依存文字の存在を忘れてはなりません。インターネットの世界では、古くから「①などの丸付き数字は機種依存文字だから使うな」といわれています。これらの文字はその昔「NEC特殊文字」と呼ばれ、Macとの

    #06 文字コードのバッドノウハウ[最終回] | gihyo.jp
  • PythonEncode - MoriMoin

    こんなエラーがおきたとき >>> print hoge Traceback (most recent call last): File "<stdin>", line 1, in ? UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128) デフォルトで設定されてる文字コードを変えると解決します。 で、その設定のしかたですが、 1. 環境変数LANG に端末が扱うエンコードを設定する。(たぶん LANG=ja_JP.utf-8 か、 ja_JP.eucJP のどちらかでいけるとおもいます) 2. 1は端末に出力(ただprintする時)するときだけに対応するので、 hoge = file(’hoge’, ’w’) print >>hoge, u

  • 1