3

Moovweb SDK で作業している場合、length("çãêá")は を返すことが期待されて4いますが、代わりに 8 を返しますlength。Unicode 文字を使用しているときに関数が正しく動作することを確認するにはどうすればよいですか?

4

2 に答える 2

3

これは、Unicode 文字とlength()関数が間違った文字セットを使用する場合によくある問題です。これを修正するには、charset_determined変数を設定して、を呼び出す前に正しい文字セットが使用されていることを確認する必要がありlength()ます。たとえば、トリチウム コードでは次のようになります。

$charset_determined = "utf-8"
# your call to length() here
于 2013-03-29T19:33:49.137 に答える
2

Unicode には、文字列の長さや「文字数」などというものはありません。これはすべて ASCII の考え方から来ています。

必要なものに応じて、次のいずれかを選択できます。

  • カーソルの移動、テキストの選択などには、書記素クラスタが使用されます。

  • 入力フィールド、ファイル形式、プロトコル、またはデータベースで文字列の長さを制限するために、長さは所定のエンコードのコード単位で測定されます。その理由は、長さの制限は、メモリ内、ディスク内、または特定のデータ構造内など、下位レベルで文字列に割り当てられた固定量のメモリから派生するためです。

画面に表示される文字列のサイズは、文字列内のコード ポイントの数とは無関係です。これには、レンダリング エンジンと通信する必要があります。コード ポイントは、モノスペース フォントや端末でも 1 列を占有しません。POSIX はこれを考慮に入れています。

詳細はhttp://utf8everywhere.orgにあります

于 2013-03-30T13:14:07.977 に答える