プログラミング-python最近『meya.ai』をいじっていて、Pythonになんちゃって入門しました。quotto.hatenablog.com初心者として戸惑ったのが文字列の扱い。u'Hello,World'「u」ってなんですかね。いうことで、ザックリとまとめてみます。※独学入門の初心者のため、間違えているところ多数の可能性があります。私はPython2.7を使っています。軽く調べたところPython3.x系では全然違うようなので注意してください。「文字型」と「ユニコード型」Python2.xにおいては、文字列を表す型に「文字型」(str)と「ユニコード型」(unicode)の2種類が存在します。「u」が付いていないのが「文字型」、付いているのが「ユニコード型」です。'unicode'>何が違うの?ザックリ言うとこういうこと。文字型:実態はバイト。変数の長さ=バイト数。ユニコード型:全ての文字がユニコード(UCS-2)。-*-#これはAsciiなのでどちらも一緒。4#これはマルチバイト(UTF-8)なので、文字型はバイト数になる。4要するにPython2.xでは文字型と言いつつもそれはバイトやでってことです。どっち使えばいいの?単純に「文字列処理ができるユニコード型を使っておけばいいじゃん」とは思うのですが、やはり注意が必要です。最たる例が標準出力とファイル出力です。以下のtest.pyというプログラムを用意します。open('test.txt','w')f.write(text)f.close()これをターミナル上で実行すると、ファイル出力がエラーとなります。range(128)なぜか。実はprint実行時にはPythonが「出力先の文字コードはUTF-8だね!」と判断して、UTF-8の文字型に変換してくれているんですね。標準出力の文字コードはsysオブジェクトに値が格納されておりそいつを基に判定するのだと思います。UTF-8#だからこの値がasciiだとprintもエラーになる。range(128)一方でf.writeでは「文字コードの指定ないからようわからん。asciiでいいやろ。」と考えasciiに変換しようとするのですが、当然日本語には対応できずエラーとなります。そのためファイル出力を行うにあたっては、あらかじめユニコード型を文字型にエンコードしておく。ファイルオープン時にエンコードを指定する。どちらかを実施する必要があります。test2.txtあいうえお結論:入門するならPython3Python3だとunicode型が無くなり、「文字型とバイト型」というわかりやすい構成になっているようです。私は何故か2.7で入門してしまいましたが、「u」とかいちいち付けるの面倒なんでこれから始める人は3.x系がおすすめです。参考にさせていただきました。私の記事よりも圧倒的に細かく・詳しく書いてあります。はてなブログPro学んだ技術まとめるはずが、仙台のことや日常のことを綴っているブログ。(1)スポンサーリンクはてなブログをはじめよう!WorldWorldWorldさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。