utf-8編碼問題編碼長度問題
utf-8經常被用於文字檔案和網路傳輸,因為不少這類場合還停留在ansi時代,需要向純ascii相容。utf-8是unicode的一種變長字元編碼 ,長度在1至6位元組。這裡注意一下,utf-8曾經是6位元組,現在是4位元組, 兩者都對。 但如果你看到介紹utf-8的文章說是6位元組,基本可以判斷這是比較早的文章。在 內容只是ascii的0x00~0x7f時,utf-8與ascii或各種ansi編碼(如gb,jisksc,iso-8859-1)的ascii部分 完全相容,也是用1位元組的低7位表示。這就保證文字編輯器開啟的utf-8格式文件中,即使擴充套件字元無法顯示,但ascii部分肯定得以順利解讀。這點對 於還需要假定是各種ansi編碼的場合非常有用,比如html,前面的純ascii部分一直到meta標記,然後可以確定隨後的編碼,而此時utf-16 則不能正常工作。utf-8採用如下所示的二進位制方式來表示31位ucs-4,x表示有效位:
1位元組 0******x
2位元組 110***xx 10******
3位元組 1110***x 10****** 10******
4位元組 11110*** 10****** 10****** 10******
5位元組 111110xx 10****** 10****** 10****** 10******
6位元組 1111110x 10****** 10****** 10****** 10****** 10******
從上可以看得出,如果處在第一位元組的引導位元組最高位為0,則是一位元組。否則看前導1的個數,來確定是幾個位元組長。前導1與有效位之間有0相隔,也可以通過首位元組的值範圍來確定位元組數。
1位元組 0 ~127
2位元組 192~223
3位元組 224~239
4位元組 240~247
5位元組 248~251
6位元組 252~253
隨後的位元組每個都以10為前導位,取值範圍則在128~191之間。可以立即得知乙個位元組是否為後續位元組,因為引導位元組的引導位不是00、01就是11,不會是10。
擷取8個字元:
字串:stefan²º¹³
位元組數:14
字元數:10
01110011
01110100
01100101
01100110
01100001
01101110
11000010
10110010
11000010
10111010
11000010
10111001
11000010
10110011
錯誤的:
字串:stefan�0
位元組數:10
字元數:8
01110011
01110100
01100101
01100110
01100001
01101110
11101111
10111111
10111101
00110000
正確的:
字串:stefan²º
位元組數:10
字元數:8
01110011
01110100
01100101
01100110
01100001
01101110
11000010
10110010
11000010
10111010
mb_internal_encoding("utf-8");
$t = "stefan²º¹³";
$t = "絕望的奧特曼絕望的奧特曼";
//$t = "stefan�0";
//$t = mb_substr($t, 0, 8);
$t = my_substr($t, 2, 8);
echo "字串:" . $t . "\n";
echo "位元組數:" . strlen($t) . "\n";
echo "字元數:" . mb_strlen($t) . "\n";
$len = strlen($t);
for($i=0;$i<$len;$i++)
echo $bin . "\n";
}//自定義utf8擷取函式
function my_substr($str, $start, $len)
else if($dec>=192 && $dec<=223)
else if($dec>=224 && $dec<=239)
else if($dec>=240 && $dec<=247)
else if($dec>=248 && $dec<=251)
else if($dec>=252 && $dec<=253)
else
for($j=$byte_len;$j>0;$j--)
$i++;
}if($cur_len>=$start)
$cur_len++;
if($sub_len>=$len)
}return $new_str;
}
UTF8工程編碼問題
問題描述 乙個基於jsp的web業務專案,頁面的charset宣告為utf 8,jb的工程也宣告為utf 8編碼,在利用乙個儲存各種區縣的js檔案的時候jsp頁面報告錯誤 沒有呼叫js中的任何方法,只是include該js進來就報錯,什麼 字元未終結 等等 利用jb開啟中文顯示不正確。問題解決 後來...
eclipse設定UTF 8編碼問題
window preferences general editors text editors spelling encoding utf 8,編輯器的編碼格式 window preferences workspace text file encoding utf 8 開啟eclipse安裝目錄 e...
UTF 8編碼的空格(194 160)問題
前台的字串傳遞到後台進行處理,發現了乙個較詭異的問題 字串中的乙個空格 ascii 32 被utf 8編碼之後變成了乙個詭異的字元 ascii 194 和 160的組合 但在後台其表象還是空格。在utf 8編碼裡面存在乙個特殊的字元,其編碼是 0xc2 0xa0 轉換成字元的時候表現為乙個半角空格,...