ホームページ  >  記事  >  バックエンド開発  >  中国語と英語のバイト長と、PHP と Java のエンコーディングの関係を覚えておいてください。

中国語と英語のバイト長と、PHP と Java のエンコーディングの関係を覚えておいてください。

WBOY
WBOYオリジナル
2016-07-29 08:56:49879ブラウズ

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个字,其余省略号表示,怎么办?
?>

上記の質問に対する答えは、オンラインで見つけることができます。最も簡単な方法は、拡張ライブラリを使用し、mb_substr 関数を使用してインターセプトすることです。

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 チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。