日本語は2バイト文字?3バイト文字?
2017/03/07
文字コードは UTF-8が主流に
前回の日記の最後に少し文字のバイト数の件を書きましたので、ついでに今日は文字のバイト数のお話です。
最近の Webサイト製作、PHPのプログラム開発は Unicodeでの開発がほとんどで、以前ほど文字コードによる文字化けに悩まされることは減って来ているのではないかと思います。
また、かつて、半角カタカナは非常に厄介な問題でもあったわけですが、こちらも技術の進歩でかなりの部分問題なく対応されて来ています。
日本語は 2バイトではない
そんなわけで、最近はあまり文字コードのことを気にしなくなりつつあるわけですが、今日の日記の主題は「日本語の 1文字は果たして何バイトなのだろうか?」ということです。
SHIFT-JIS、EUCを主に使っていた頃は、全角文字は 2バイト文字とも言われるように、1文字は 2バイトだったわけです。
ですが、Unicodeなるとやや事情が異なってきてしまいます。
Unicodeでもこれまでと同様 2バイトのものもありますが、文字によっては 3バイト、4バイトのものが存在するわけです。
詳しくは、下記のサイトが参考になりました。
PHPのstrlen関数で全角文字が3バイトになる件
http://hamamuratakuo.blog61.fc2.com/blog-entry-421.html
そして、「文字ごとにバイト数が違う場合、どのような影響があるのか?」ということについては、フォームなどから文字を入力してもらう際に行う文字数チェックで、意図しない結果になる可能性が出てくる、というわけです。
PHPで文字数をチェックする際には「strlen」で文字のバイト数を取得して計算するわけですが、文字によって返ってくるバイト数が違ってくるために、一概に「入力は何文字まで」と言う制限が出来なくなってしまうわけです。
DBに日本語を保存する場合、char型などで桁数を指定しようとした場合にも不具合が起こる可能性があるわけです。
詳しい説明などは書きのサイトなどが参考になるかと思いますのでご覧いただければ、今後の参考になるかと思います。
日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP
http://www.cpa-lab.com/tech/0144
Script雑感
http://zombiebook.seesaa.net/article/33192046.html
2014.06.26 追記
日本語のバイト数については、MySQLなどのデータベースを構築する際にも関わってくる問題です。
MySQLでの日本語のバイト数の扱いについては「MySQLのInnoDBでUniqueキーは最大767バイト」に記事を書いていますので、参照してください。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ
コピーコンテンツを発見したときにやること!Googleに通報、画像の直リンクを禁止、RSSの全文配信を停止。この対策をしないとあなたのサイトの評価も下がるかも!
-
-
Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法
Pythonをコマンドラインで実行する際、引数を付与して実行する方法の解説。その時問題となる日本語(全角文字)を利用する方法を解説。Windows環境での解説。
-
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。
-
-
.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!
Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!
-
-
借りてはいけないレンタルサーバ実例4社・アルファメール・WEBアリーナ
餅は餅屋。サーバはサーバ屋が提供するサービスを利用するべきという記事で、具体例 4サービスを例にこんなサーバはNGと紹介しています。
-
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
-
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。
-
-
.htaccessのmod_deflateでファイル圧縮送信で高速化でSEO対策!
Page Speed Insightsの指摘事項であるファイルの圧縮送信の対応方法。処理内容の解説もあるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!
-
-
.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
Gitで管理する対象、対象外のファイル、フォルダの指定は .gitignoreに記述する。その基本的な記述の方法に加え、無視対象にしたフォルダの中の特定のファイルを管理対象にする記述方法を解説。
-
-
直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。