pythonで、日本語をユニコード型にして使わなければならない場面とは、例えばどのような場面なのかよくわかりません。encodeなどユニコードを扱うメソッドがユニコードを対象とするのはわかりますが、そもそもユニコードを扱わずに済むのならそれに越したことはないし、これは投稿して聞いてみようと思いました。
たとえばパソコンの上のインタープリタでは、
print "abdあ"+"\n"+"い"
は思い通りコンソールに出力されますし、
"abcあ"
も"abc\xe3\81\84"で、そのままです(UTF-8)。
これを、
u"abcあ"
とわざわざ"abc\u3042"にしてしまい入出力ではencode/decodeなど色々面倒になる、その理由がイマイチわからず、つまづいています。
①文字数を数えて処理するためにこのような面倒なことをしているのでしょうか。
②それとも日本語の文字によっては、ユニコードにしないと変なことが起こるのでしょうか。
③だとすると8bit文字列型のままで日本語を扱うpythonプログラムは普通には無いのでしょうか。
pythonを週末の趣味で始めました、初心者です。
使っているのはpython2.7です。
お恥ずかしい質問ですが、皆様どうぞよろしくお願いいたします。
No.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
という、のは、結構合理的ではないでしょうか。
非常に高いレベルの方にお答えをいただき恐縮にございます。文字数を数えるために必要ということ、よくよくわかりました。私の質問②③は御回答に足るレベルにも達していなかったみたいですね。「pythonのユニコード”型”」と「コードポイント」との関係についての理解が足りないようです。大変申し訳ありませんでした。お詫びを申し上げます。
No.1ベストアンサー
- 回答日時:
フツーに使う際には仰る通り、特に問題無いんじゃないんですか?
ただね〜、たまにね〜、例えば毛唐が作ったライブラリとか〜、UTF-8とかが通らなかったりする場合あるんですよね〜。
「ASCIIかい!」
とか言う時、どうしてもencode/decodeのお世話にならんとアカンケースがしばしば・・・・。
まあ、Python3だったらほぼそういう問題はないとは思うんですが、2.x系列だとたまにそういう「外部ライブラリとのやり取り」で、文字コードが原因だったりする事があります。
他の人の手になるライブラリなどを使わなければ特に問題無いとのこと、よくわかりました。お答えをいただきどうもありがとうぎざいました。とても参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- HTML・CSS <meta charset="utf-8"><!-- 文字化け防止ユニコード --> ?最近モバイル 1 2022/12/11 04:27
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- Excel(エクセル) Excelの数式の質問です。 A列に「redhat 8.0, centOS 7.9, python 4 2023/05/12 19:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C言語]fputsとfprintfの違い
-
エクセルでアルファベットか数...
-
C言語で文字列の中の文字列のカ...
-
Excelはなんで先頭の0を消すん...
-
マクロ処理でのループの記述に...
-
【Excel VBA】複数ある特定の文...
-
sedなどで、特定の文字列の後の...
-
文字列からカンマを取り除きたい
-
エクセルでセル内の文字列の最...
-
Left関数とRight関数を合わせた...
-
A B C D E の五文字のすべてを...
-
VBAにおける文字列結合と繰り返...
-
VBの「As String * 128」とは?
-
OnTime 使用時のプロシージャへ...
-
EXCELで=より左の文字を一括で...
-
エクセルで文字列をtxtファイル...
-
【COBOL】文字列から数値項目に...
-
同一セル内に関数と文字列を同...
-
StringGridで選択した箇所の文...
-
MS SQLServer のSQLで文字列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報