Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

UTF-8での入力文字数について

少し一般的な質問ですが、よろしくお願いいたします。 UTF-8でコードを書いているのですが、フォームからの入力文字数のチェックのところで、どうするべきか迷っています。 フォームからの文字数の制限は、「全角10文字・半角20文字以下」のようにするのが一般的かと思いますが、UTF-8の場合、皆さんはどのような文字数の制限にされているのでしょうか? 「全角10文字、半角30文字以下」 もしくは 「10文字以下」のように指定しているのでしょうか? ご意見、アドバイス等、お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#198419
noname#198419
回答No.1

ディスクやメモリの見積もり都合で「全角10文字、半角30文字以下」という考え方もあるでしょうが・・・ 全角とか半角といった出力デバイスにおけるグリフの描画領域にもとづく考え方本質的なものからいえば、暗黙でもって「全角10文字に対して半角20文字」が要求仕様にあると考えるべきである。 もしフォントの仕様都合で「半角のグリフ描画領域は全角の半分である」という関係が崩れていると判断するならば、全角と半角の両方に文字数制限を規定しても意味なさないので、単に「10文字以下」でもかまわないと思う。

xyz_1990
質問者

お礼

ご回答ありがとうございます。 単純に「10文字以下」のような指示にしようかと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.2

どこで何のチェックをどれくらいするのか・できるのかが 問題ですけど, UTF8というエンコーディングは 1バイト・2バイト・3バイト・4バイト の可変長エンコーディングです. そして,各バイトを調べれば それが何バイトのコードの断片化が分かるようになっています. 2進で書けば 0xxxxxxx => 1バイトで一文字 110xxxxx => 2バイトで一文字 1110xxxx => 3バイトで一文字 11110xxx -> 4バイトで一文字 なので,最初が0xxxxxxxだったら,それで一文字 最初が110xxxxxだったら次の1バイトと合わせて一文字 という具合です. #ただし,UCS2の範囲なら最大3バイト, #UCS4までいれるなら4バイトです. こういう意味でUTF8で全角・半角とかいうのは 1バイト文字を半角・2バイト文字を全角という 習慣的な呼び方ににあてはめるのは まるで無意味です. せいぜい意味がありそうなのは ASCIIの範囲(0x00~0x7F)と そうではない部分の範囲の区別くらいでしょう. ちなみにUTF8では漢字とかは3バイトのはずです. #ちなみに「グリフの描画幅」と文字コードは全く無関係で #文字数の取得にはグリフの描画幅は全く関わりません.

xyz_1990
質問者

お礼

ご回答ありがとうございます。 データ的には、バイト数の制限は意味がないかもしれませんが、 使い勝手を考えると、アルファベットは文字数がかさむので、従来の「全角10文字、半角20文字」といった指定方法はリーズナブルな気がしていたのですが、今回は単に「10文字以内」のような指示にしようと思います。 すこし、いろんな意見が聞きたいので、もう少ししてから締め切りたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A