日本語は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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題
FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。
-
-
Selenium WebDriver、Pythonをインストールしブラウザ自動操作の環境構築手順のまとめ
ブラウザを自動操作しテストを実行するロボットをselenium WebDriver+Pythonの環境を構築し、動作確認までの手順のまとめ。初心者向けに詳細解説。サンプルソースも。
-
-
Git管理のソースを元に新しく構築する環境に反映させる手順
Gitで管理しているソースを使って環境を構築する方法を解説。CakePHPを使う想定で、環境を構築したのちpullして、重複ファイルを削除して、改めてpullすれば出来上がる。
-
-
PythonでURLの有無、存在をチェックするスクリプト
PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。
-
-
サイト更新、引越時に.htaccessでリダイレクトする方法解説
サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。
-
-
Selenium WebDriverでFirefoxをプライベートウィンドウ/Chromeをシークレットモードで起動する方法・言語はpython
Seleniumでは初期状態でブラウザを起動する Seleniumでブラウザ …
-
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。
-
-
Pythonをコマンドラインで実行。全角文字(日本語)を引数にする場合の対処方法
Pythonをコマンドラインで実行する際、引数を付与して実行する方法の解説。その時問題となる日本語(全角文字)を利用する方法を解説。Windows環境での解説。
-
-
ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?
ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。
-
-
ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化
あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!