Lua與json字串轉換之UTF8

2021-06-28 08:36:41 字數 3578 閱讀 4309

在lua中讀取json字串時遇到這種字串需要按照utf8的規則對其進行轉碼,將\u***x格式的字元轉換成相應的字形,其轉換規則介紹如下:

1.先將編碼中的資料轉換為整數,並判斷此編碼是屬於utf8中的幾個位元組編碼,判斷規則如下:

unicode/ucs-4bit數

utf-8

byte數

備註0000 ~007f  

0~70*** ***x

10080 ~07ff

8~11

110x ***x

210

xx ***x

0800 ~ffff

12~16

1110***x

3 基本定義範圍:0~ffff

10xx ***x

10xx ***x

1 0000 ~1f ffff

17~21

1111 0***

4 unicode6.1定義範圍:0~10 ffff

10xx ***x

10xx ***x

10xx ***x

20 0000 ~3ff ffff

22~26

1111 10xx

510xx ***x

10xx ***x

10xx ***x

10xx ***x

400 0000 ~7fff ffff

27~31

1111 110x

610xx ***x

10xx ***x

10xx ***x

10xx ***x

10xx ***x

2.根據整數的值判斷落在哪個區間,根據這個區間決定此字形的位元組數,並按照規則進行轉換:

1).對0x40進行求餘,得到的結果加上0x80作為最後乙個位元組的ascii碼,按照string.char(res)轉換為字元

2).將值除以0x40取整,得到的值作為新值重複上述過程

3).最後乙個值新增上相應的字元頭,如六個位元組的加上0xfc,五個位元組的就加上0xf8,之後按照string.char(res)轉換為字元,將這些字元按照先低後高的順序連線起來就得到了結果,**如下

function num2char(num,k)                                   -- convert the unicode number into character

local char = string.char

local c,r = ''

for i = 1,k do

r,num = num%0x40, math.floor((num/0x40))

c=table.concat()

endreturn c,num

endfunction toutf8(s) -- convert the json string unicode into character

local char = string.char

local n,c=tonumber(s)

if n<0x80 then --1 byte

return char(n)

elseif n<0x800 then --2 byte

c,n = num2char(n,1)

return table.concat()

elseif n<0x10000 then --3 byte

c,n = num2char(n,2)

return table.concat()

elseif n<0x200000 then --4 byte

c,n = num2char(n,3)

return table.concat()

elseif n<0x4000000 then --5 byte

c,n = num2char(n,4)

return table.concat()

else --6 byte

c,n = num2char(n,5)

return table.concat()

endend

同樣,將字形轉換為json的\u字串則是乙個反過程,**如下:

function tounicode(c,k)                                    -- convert character into unicode code(number)

local byte = string.byte

local n,tmp = 0

if 1 == k then

n = byte(c)

elseif 2 == k then

n = byte(c,1) - 0xc0

for i=2,k do

tmp =byte(c,i) - 0x80

n = n*0x40+tmp

endelseif 3 == k then

n = byte(c,1) - 0xe0

for i=2,k do

tmp =byte(c,i) - 0x80

n = n*0x40+tmp

endelseif 4 == k then

n = byte(c,1) - 0xf0

for i=2,k do

tmp =byte(c,i) - 0x80

n = n*0x40+tmp

endelseif 5 == k then

n = byte(c,1) - 0xf8

for i=2,k do

tmp =byte(c,i) - 0x80

n = n*0x40+tmp

endelseif 6 == k then

n = byte(c,1) - 0xfc

for i=2,k do

tmp =byte(c,i) - 0x80

n = n*0x40+tmp

endend

return n

endfunction jstr(a)

return string.format("\\u%04x",a)

end

json與字串轉換

一 將json字串轉換成js物件 建立json字串 var str 將此字串轉換成物件 1.使用eval函式左轉換 var obj eval json 2.使用json物件提供的函式做轉換 json是瀏覽器提供的物件 var obj json.parse str 3.引入外部api來做轉換 該檔案由...

JSON物件與JSON字串轉換

特點 a.json物件屬性名,要帶雙引號 b.json沒有變數 json物件的表示式有兩種 a.表示式 var object b.物件字面量 字面量後不需要分好 json陣列中存的是json物件 json陣列也是陣列,擁有陣列所有方法 var data 返回的是新json字串,不改變原來的json物...

JS 操作JSON,字串與JSON之間轉換

1 字串轉json json.parse string 2 json轉字串 json.stringify obj 3 json物件追加資料 使用push方法,用法如下 現在的json資料a為 b的資料格式要和a相同,使用a.push b 後,a的資料為 目前發現push這個方法只能追加第乙個子級的資...