在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這個方法只能追加第乙個子級的資...