如何判斷一段中文是gb3213還是Big5編碼的?

2021-03-31 08:56:29 字數 1932 閱讀 6015

//判斷big5實現如下

procedure tform1.button1click(sender: tobject);

var i:integer;

str:string;

begin

str:='該如何讓他正常怯換到繁體呢';

//str:='能支援互轉的軟體並不多';

for i := 1 to length(str) do

if not odd(i) then

if byte(str[i])<127 then

showmessage(inttostr(byte(str[i]))+' 有big5包含');

end;

這種方式可以在大多數的情況下判斷出來字串是不是big5

還有就是delphi中利用<>實現了將gb>>big5的過程,可轉換後確是顯示出亂碼.其實應該是正確轉換了,但是label1 font charset是不是仍然使用的是gb_3213,這個要自己注意哦.

一點資料

1、******************************=

當我們拿到乙個編碼時,如何判斷是不是乙個gbk碼,如果是gbk碼如何定位它的位置呢?

判斷乙個gbk碼應該比較簡單,我們只要根據它的有效範圍進行判定即可。如:

if 0x81<=ch1<=0xfe and (0x40<=ch2<=0x7e or 0x7e<=ch2<=0xfe): #is gb char

這裡ch1和ch2分別是乙個字元的高位元組和低位元組。

如何定位(為什麼要定位我們在後面講)?首先介紹一下碼表。碼表是所有編碼放在一起形成的,你可以將其放在檔案中(這裡講述的是將編碼放在檔案中)。我們在存放編碼時是將有實際意義的編碼放在了一起(因為有一些組合是不存在的),而且是按位元組大小的順序放的。根據gbk的編碼範圍,我們可以設想乙個二維座標,縱座標是高位元組,橫座標是低位元組,每乙個交叉點上是乙個漢字,佔兩個位元組。這樣一行上的漢字個數應該為0xfe-0x40+1-1=190(加1是因為要把0x40也算進去。減1是因為要把7f去掉)。定位時,我們先用高位元組減去0x81,得到縱座標偏移量。用低位元組減去0x40得到橫座標偏移量。用縱座標偏移量乘以每個漢字個數,加上橫座標偏移量就得到漢字的偏移量。再乘以2得到位元組的偏移量。那麼定位演算法為:

index=((ch1-0x81)*190+(ch2-0x40)-(ch2/128))*2

上面的演算法中有-(ch2/128)。這是因為gbk中沒有7f碼,因此當ch2小於7f時,ch2/128=0,則表示7f沒有計算在內。而當ch2大於7f時,ch2/128=1,則表示多算了7f一值,因此要去掉。由於乙個漢字有兩個位元組,故要乘以2。這樣我們就得到乙個gbk漢字在碼表中的位元組位置了。

big5是香港和台灣地區使用的編碼集。它的範圍為:高位元組從0xa0到0xfe,低位元組從0x40到0x7e,和0xa1到0xfe兩部分。判斷乙個漢字是否是big5編碼,可以如上對字元的編碼範圍判斷即可。如何定位呢?那麼也想象所有編碼排列為乙個二維座標,縱座標是高位元組,橫座標是低位元組。這樣一行上的漢字個數:(0x7e-0x40+1)+(0xfe-0xa1+1)=157。那麼定位演算法分兩塊,為:

if 0x40<=ch2<=0x7e: #is big5 char

index=((ch1-0xa1)*157+(ch2-0x40))*2

elif 0xa1<=ch2<=0xfe: #is big5 char

index=((ch1-0xa1)*157+(ch2-0xa1+63))*2

2、****************************************

一般是這樣辨別gb/big5的:

1、gbcode的內碼的兩個位元組都是從a0h-feh之間的;

2、bigcode的內碼的第乙個位元組是80h-ffh,第二個位元組是00h-ffh;

你要瀏覽全文,看看是否有第二個位元組是小於7fh的漢字,如果有的話,一般是bigcode的。當然也有特殊情況,不過非常少見的。

PHP 判斷一段字串是否包含另一段字串

php語言是乙個功能強大的嵌入式html指令碼語言,它的易用性讓許多程式設計師選擇使用。php判斷字串的包含,可以使用php的內建函式 strstr,strpos,stristr直接進行判斷.也可以通過explode函式的作用寫乙個判斷函式。下面介紹php判斷字串的包含的具體使 用方法 1.strs...

如何利用PHP來擷取一段中文字串而不出現亂碼

code 1 e818e36f81 功能 擷取全形和半形混合的字串以避免亂碼 引數 str cut 需要截斷的字串 length 允許字串顯示的最大長度 function substr cut str cut,length 30 return str cut code 1 e818e36f81 說明...

如何選擇結婚物件,抉擇一段感情

很多單身男女,而且都是很頑固的單身,三十好幾,各自條件都不差,愣是無法找到物件。更有很多人,結婚了,但婚姻中總有種種蚤子和不滿,搞得內心躁結,但又無法對人說。這些問題,這些人,歸根結底,其實是乙個原因,不明白自己的人生,俗語說,就是不懂事,不懂得社會 世界的遊戲規則 人生應對世俗的方法和技巧 不明白...