アプリ版:「スタンプのみでお礼する」機能のリリースについて

pythonで、日本語をユニコード型にして使わなければならない場面とは、例えばどのような場面なのかよくわかりません。encodeなどユニコードを扱うメソッドがユニコードを対象とするのはわかりますが、そもそもユニコードを扱わずに済むのならそれに越したことはないし、これは投稿して聞いてみようと思いました。

たとえばパソコンの上のインタープリタでは、
print "abdあ"+"\n"+"い"
は思い通りコンソールに出力されますし、
"abcあ"
も"abc\xe3\81\84"で、そのままです(UTF-8)。
これを、
u"abcあ"
とわざわざ"abc\u3042"にしてしまい入出力ではencode/decodeなど色々面倒になる、その理由がイマイチわからず、つまづいています。
①文字数を数えて処理するためにこのような面倒なことをしているのでしょうか。
②それとも日本語の文字によっては、ユニコードにしないと変なことが起こるのでしょうか。
③だとすると8bit文字列型のままで日本語を扱うpythonプログラムは普通には無いのでしょうか。

pythonを週末の趣味で始めました、初心者です。
使っているのはpython2.7です。
お恥ずかしい質問ですが、皆様どうぞよろしくお願いいたします。

A 回答 (2件)

どの文字も「1文字」として扱えるのは、便利だと思いますよ。


特に、Webアプリのような文字列操作が多くなるものでは。


例えば。

s='あいabうcdえお'
の5文字目と、後から2文字目を抜き出す
※ 5バイト目、後から2バイト目ではない。
ただし、入力文字列はいろいろと変化する。

というプログラムを作れと言われたら、どう作ります?


「bとcの間に1文字」
という正規表現、 Unicode文字列なら b.c で済みますが、str文字列ではどうなるでしょう?
もちろん、間の文字は日本語だけとも半角英数だけとも限りません。

加えて、
スクリプトをShift_JISで書いたときでも、期待通りに動作するようにしろ
って言われたらどうします?



そんなことを考えると

・外部の文字列(UTF-8だったりShift_JISだったり)はdecodeしてUnicode文字列で取り込む
・処理はUnicode文字列で
・外部に戻す際には、相手に合せてencode

という、のは、結構合理的ではないでしょうか。
    • good
    • 0
この回答へのお礼

非常に高いレベルの方にお答えをいただき恐縮にございます。文字数を数えるために必要ということ、よくよくわかりました。私の質問②③は御回答に足るレベルにも達していなかったみたいですね。「pythonのユニコード”型”」と「コードポイント」との関係についての理解が足りないようです。大変申し訳ありませんでした。お詫びを申し上げます。

お礼日時:2016/07/04 22:30

フツーに使う際には仰る通り、特に問題無いんじゃないんですか?



ただね〜、たまにね〜、例えば毛唐が作ったライブラリとか〜、UTF-8とかが通らなかったりする場合あるんですよね〜。

「ASCIIかい!」

とか言う時、どうしてもencode/decodeのお世話にならんとアカンケースがしばしば・・・・。

まあ、Python3だったらほぼそういう問題はないとは思うんですが、2.x系列だとたまにそういう「外部ライブラリとのやり取り」で、文字コードが原因だったりする事があります。
    • good
    • 0
この回答へのお礼

他の人の手になるライブラリなどを使わなければ特に問題無いとのこと、よくわかりました。お答えをいただきどうもありがとうぎざいました。とても参考になりました。

お礼日時:2016/07/04 22:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!