1.PHP
PHPは実際にはC言語と同じで、ASCIIを使用し、GBKエンコーディングでは1つの文字が1バイトを占有し、1つの英語が1バイトを占有し、1つの中国語が2バイトを占有します。ただし、UTF-8 エンコーディングでは、英語の文字は依然として 1 バイトを占有しますが、中国語の文字は 3 ~ 4 バイト (通常は 3 バイト) を占有します。これにより、通常、文字列の語長を取得できるようになります。文字列のインターセプトにより問題が発生します。例:
<?php $str = "我爱你Iloveyou"; echo strlen($str); //utf8下是17,GBK下是14,但如果问你$str的字长是多少,或者让你显示前6个字,其余省略号表示,怎么办? ?>
2.Java
Javaのcharは2バイトです。 Java は Unicode を使用しており、中国語または英語の文字の Unicode エンコードでは 2 バイトが使用されますが、他のエンコード方式が使用される場合、文字が占めるバイト数は異なります。例:
public class Test {
public static void main(String[] args){
String str = "我们aaaaa";
int byte_len = str.getBytes().length;
int len = str.length();
System.out.println("字节长度为:" + byte_len);
System.out.println("字符长度为:" + len);
}
}
上記の例では、GBK での出力結果は 9 と 7 ですが、UTF-8 での出力結果は 11 と 7 です。つまり、エンコーディングが何であっても、str.length() を使用して取得される語長はすべて一貫しています。 このメソッドは、文字列内の文字数を漢字でも英語でも1文字として返します。
上記では、PHP と Java における中国語と英語のバイト長とエンコーディングの関係について、その内容も含めて紹介しましたので、PHP チュートリアルに興味のある友人の参考になれば幸いです。