phpのunicodeとutf 8コードについて簡単に話してください。
unicodeとutf 8コードを再認識します。
今日まで正確に言えば、先ほどです。UTF-8コードとユニックコードは違います。違いがあります。
彼らの間には一定の連絡があります。その違いを見てください。
UTF-8の長さは一定ではなく、1、2、3バイトかもしれません。
Unicodeの長さは一定で、2バイト(USC-2)
UTF-8はUnicodeと相互に変換できます。
unicodeとutf 8の関係
ユニック(16進)
UTF-8(バイナリ)
0000-007 F 0 xxxxx
0080-07 FF 110 xxxx 10 xxxxxx
0800-FFFF 1110 xxxxx 10 xxxxxxxxx
上の表は2つの意味があります。最初はUnicodeとUTF-8の文字範囲の対応です。もう一つはUnicodeがどのようにUTF-8と変換されているかが分かります。
UTF-8からUnicodeへの変換を先に言います。
UTF-8符号化のバイナリと上の3つのフォーマットをマッチングして固定ビット(表の非x位置)を削除し、右から左に8人ずつのグループにします。8桁未満の左はリードしません。2バイトの16 bittsになります。この16 bittsはUTF-8対応のUniodeコードです。以下のいくつかの例を見てください。
上の写真の文字コードのフォーマットはUTF-8で、WinHexでその16進数の表示を見ることができます。
それに今日の問題の原因は、先端から多くの単語を入力して、UTF-8フォーマットの単語は最大30バイトです。だから、フロントエンドとバックグラウンドでそれぞれ検証します。javascriptはユニックコードを使っています。バックエンドのプログラムはUTF-8コードを使っています。今の解決方法はこのようにしています。
先端
今日まで正確に言えば、先ほどです。UTF-8コードとユニックコードは違います。違いがあります。
彼らの間には一定の連絡があります。その違いを見てください。
UTF-8の長さは一定ではなく、1、2、3バイトかもしれません。
Unicodeの長さは一定で、2バイト(USC-2)
UTF-8はUnicodeと相互に変換できます。
unicodeとutf 8の関係
ユニック(16進)
UTF-8(バイナリ)
0000-007 F 0 xxxxx
0080-07 FF 110 xxxx 10 xxxxxx
0800-FFFF 1110 xxxxx 10 xxxxxxxxx
上の表は2つの意味があります。最初はUnicodeとUTF-8の文字範囲の対応です。もう一つはUnicodeがどのようにUTF-8と変換されているかが分かります。
UTF-8からUnicodeへの変換を先に言います。
UTF-8符号化のバイナリと上の3つのフォーマットをマッチングして固定ビット(表の非x位置)を削除し、右から左に8人ずつのグループにします。8桁未満の左はリードしません。2バイトの16 bittsになります。この16 bittsはUTF-8対応のUniodeコードです。以下のいくつかの例を見てください。
上の写真の文字コードのフォーマットはUTF-8で、WinHexでその16進数の表示を見ることができます。
=> UTF-8 => UTF-8 => 16 => 16
=> E6B189 => 11100110 10110001 10001001 => 01101100 01001001 => 6C49
=> E5AD97 => 11100101 10101101 10010111 => 01011011 01010111 => 5B57
# chrome
'\u6C49'
" "
'\u5B57'
" "
# , UTF-8 Unicode ,
,11100110
UTF-8 , ,3
2 11100101 10101101 10010111
1011011 01010111
16 , 01011011 01010111 => 5B57
ユニフォームからUTF-8への変換を見てください。
5B57
5B57 Unicode ,0800 <= 5B57 <= FFFF, 5B57 UTF-8 , 1110xxxx 10xxxxxx 10xxxxxx
5B57 101101101010111
UTF-8 11100101 10101101 10010111
問題を話すそれに今日の問題の原因は、先端から多くの単語を入力して、UTF-8フォーマットの単語は最大30バイトです。だから、フロントエンドとバックグラウンドでそれぞれ検証します。javascriptはユニックコードを使っています。バックエンドのプログラムはUTF-8コードを使っています。今の解決方法はこのようにしています。
先端
function utf8_bytes(str)
{
var len = 0, unicode;
for(var i = 0; i < str.length; i++)
{
unicode = str.charCodeAt(i);
if(unicode < 0x0080) {
++len;
} else if(unicode < 0x0800) {
len += 2;
} else if(unicode <= 0xFFFF) {
len += 3;
}else {
throw "characters must be USC-2!!"
}
}
return len;
}
#
utf8_bytes('asdasdas')
8
utf8_bytes('yrt ')
12
楽屋
# GBK
$len = ceil(strlen(bin2hex(iconv('GBK', 'UTF-8', $word)))/2);
# UTF8
$len = ceil(strlen(bin2hex($word))/2);
以上述べましたが、本文の内容は全部です。お好きになってください。