local M = {}
local bit = require("bit")
function M.unicode_to_utf8(convertStr)
if type(convertStr)~="string" then
return convertStr
end
local resultStr=""
local i=1
while true do
local num1=string.byte(convertStr,i)
local unicode
if num1~=nil and string.sub(convertStr,i,i+1)=="\\u" then
unicode=tonumber("0x"..string.sub(convertStr,i+2,i+5))
i=i+6
elseif num1~=nil then
unicode=num1
i=i+1
else
break
end
-- print(unicode)
if unicode <= 0x007f then
resultStr=resultStr..string.char(bit.band(unicode,0x7f))
elseif unicode >= 0x0080 and unicode <= 0x07ff then
resultStr=resultStr..string.char(bit.bor(0xc0,bit.band(bit.rshift(unicode,6),0x1f)))
resultStr=resultStr..string.char(bit.bor(0x80,bit.band(unicode,0x3f)))
elseif unicode >= 0x0800 and unicode <= 0xffff then
resultStr=resultStr..string.char(bit.bor(0xe0,bit.band(bit.rshift(unicode,12),0x0f)))
resultStr=resultStr..string.char(bit.bor(0x80,bit.band(bit.rshift(unicode,6),0x3f)))
resultStr=resultStr..string.char(bit.bor(0x80,bit.band(unicode,0x3f)))
end
end
resultStr=resultStr..'\0'
return resultStr
end
function M.utf8_to_unicode(convertStr)
if type(convertStr)~="string" then
return convertStr
end
local resultStr=""
local i=1
local num1=string.byte(convertStr,i)
while num1~=nil do
local tempVar1,tempVar2
if num1 >= 0x00 and num1 <= 0x7f then
tempVar1=num1
tempVar2=0
elseif bit.band(num1,0xe0)== 0xc0 then
local t1 = 0
local t2 = 0
t1 = bit.band(num1,bit.rshift(0xff,3))
i=i+1
num1=string.byte(convertStr,i)
t2 = bit.band(num1,bit.rshift(0xff,2))
tempVar1=bit.bor(t2,bit.lshift(bit.band(t1,bit.rshift(0xff,6)),6))
tempVar2=bit.rshift(t1,2)
elseif bit.band(num1,0xf0)== 0xe0 then
local t1 = 0
local t2 = 0
local t3 = 0
t1 = bit.band(num1,bit.rshift(0xff,3))
i=i+1
num1=string.byte(convertStr,i)
t2 = bit.band(num1,bit.rshift(0xff,2))
i=i+1
num1=string.byte(convertStr,i)
t3 = bit.band(num1,bit.rshift(0xff,2))
tempVar1=bit.bor(bit.lshift(bit.band(t2,bit.rshift(0xff,6)),6),t3)
tempVar2=bit.bor(bit.lshift(t1,4),bit.rshift(t2,2))
end
resultStr=resultStr..string.format("\\u%02x%02x",tempVar2,tempVar1)
i=i+1
num1=string.byte(convertStr,i)
end
return resultStr
end
return M
cocos lua unicode、utf8编码转换
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
- 说明本次redis集群安装在rhel6.8 64位机器上,redis版本为3.2.8,redis的gem文件版本为...