サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは本日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。
日本語を扱うPythonプログラマ(with Python2)にとっての最大の天敵(過言)、UnicodeEncodeError。 昨日横の人がその餌食となり、その解決の手助けをしているうちに自分の中でPython2での文字列処理の方向が少し整理できた。(近いうちにPython3バージョンもまとめたい) 個人的結論 バイト文字列/ユニコード文字列のどちらを扱っているかを常に意識しておく。 (基本的に)プログラム内ではユニコード文字列を扱い、標準入出力とやり取りする際(ex. print)にはバイト文字列に変換する。 バイト文字列とユニコード文字列 バイト文字列は特定のエンコード方式(ex. utf-8)でエンコードされており、リテラルでは'あいう'のように表現する。一方、ユニコード文字列はUnicodeのコードポイントを並べたものであり、リテラルではu'あいう'のようにuをつける。 (py
3では文字列はunicode文字列として扱われるようになったので、すべてpython2でいうところのu''になりました。u''表記してもエラーにはなりませんが(python3.3以上)同じ意味です。 バイナリデータを扱うときには、bytes型に変換します。bytes型は文字列っぽく扱えますが、strとbytesの連結などはできないので用途に合わせて適切な型で持つようにします。 例えば特定の文字コードの文字列を持ちたい場合はbytes型になります。str文字列として加工などをして最終的に出力する際に、任意の文字コードのバイト列としてエンコードして出力するという使い方になります。 strからbytes encodeでbytes型(utf-8)に変換します。 >>> 'あいう'.encode('utf-8') b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86' #ut
昨日の記事に引き続き、今度はPython3で文字列を扱う場合の自分なりの方針をまとめてみる。 個人的結論 ほとんどの場合は文字列を扱い、標準入出力とも文字列でやり取りする。 ただし外部プログラムからバイト列が渡される、などバイト列を扱わなければいけないこともありうる。逆に言うと、そういう場合を除いてはバイト列を扱わない。 これが良い悪いということではなく、現状自分の書くコードではバイト列を扱わなければならないケースが少ないというだけ。 バイト列と文字列 バイト列は特定のエンコード方式でエンコードされており、リテラルではb'a'のように表現する。一方、文字列はUnicodeのコードポイントを並べたものであり、リテラルでは'あいう'のように表現する。 さらっと書いたが、この時点でPython2との扱いの違いが分かる。 「Python3のバイト列」は「Python2のバイト文字列」と扱いが似てい
2種類の文字列 Python2には文字列が2種類ある。 ここではその2つを str文字列 および unicode文字列 と呼び、これらをまとめて 文字列 と呼ぶ。 公式ドキュメントでも用語があまり統一されていないので、とりあえずこう呼ぶことにする。 先に言っておくと、基本的にunicode文字列を使うべき。 str文字列 '...' リテラルで生成されるオブジェクト UTF-8, Shift-JISなどの符号化方式によって各文字を符号化して得られるバイトを並べたもの 1文字が複数バイトで表現されることもある str文字列そのものは、符号化に使われた符号化方式の情報をもたない 符号化方式を知るには基本的に片っ端から試すらしい 対話環境で 'あいう' と入力すると、 \x で1バイトずつ区切られたバイト列が返る
ちょっと久々のJavaネタですが、 前から書き溜めていた、文字コードやエンコードについてのノウハウを書きます。 今回は、詳細な説明に入る前に、前提になる知識や用語について説明しておきます。 文字コードとエンコードって違うの? 新人くん「では、HTMLの文字コードはUTF-8でお願いします」 先輩社員「文字コードじゃなくてエンコーディングでしょ?」 新人くん「えっ。あぁ、はい、それで」 文字コードとエンコード(エンコーディング)を混同して使ったりすると、 ちょっと原理主義的な人に怒られたりするんですけど、 大まかに言えば、「文字コード」は文字に割り当てられた「数字」のことで、 「エンコード」は文字と数字をマッピングする「方式」のことだと捉えていれば、大きくは外れません。 ただ、「文字コード」という言葉は、「数字」「方式」の両方で使われるほか、 文字一覧を示す「Charset」という意味で使わ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く