Unicode字符串的字节表示
2018-2-13 10:43:45
收藏:0
阅读:81
评论:2
这是python3代码:
>>> bytes(json.dumps({'Ä':0}), "utf-8")
b'{"\\u00c4": 0}'
json.dumps()返回Unicode字符串,bytes()返回它的字节表示——字符串编码为utf-8。
我如何在Lua中实现相同的结果?我需要一个包含非ASCII字符的json对象的字节表示。
点赞
用户9383219
使用 string.gsub 的简单版本:
local function python_escape(str)
return (string.gsub(
str,
-- 以一个或多个 continuation bytes 紧随的前导字节;
-- 对于 Lua 5.1 的十进制版本:"[\194-\244][\128-\191]+",
"[\xC2-\xF4][\x80-\xBF]+",
function (non_ASCII)
local codepoint = utf8.codepoint(non_ASCII)
if codepoint <= 0xFFFF then
return ("\\u%04x"):format(codepoint)
else
return ("\\U%08x"):format(codepoint)
end
end))
end
我在返回值前加入了括号(string.gsub(--[[...]]))以去掉 string.gsub 的第二个返回值(替换次数)。
2018-02-19 23:37:56
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

你必须手动完成。
local function utf8_to_unicode(utf8str, pos) local code, size = utf8str:byte(pos), 1 if code >= 0xC0 and code < 0xFE then local mask = 64 code = code - 128 repeat local next_byte = utf8str:byte(pos + size) or 0 if next_byte >= 0x80 and next_byte < 0xC0 then code, size = (code - mask - 2) * 64 + next_byte, size + 1 else code, size = utf8str:byte(pos), 1 end mask = mask * 32 until code < mask end -- 返回 utf8 字符的代码和字节数 return code, size end function utf8_to_python(utf8str) local pos = 1 local z = '' while pos <= #utf8str do local unicode, size = utf8_to_unicode(utf8str, pos) pos = pos + size if unicode < 0x80 then z = z..string.char(unicode) elseif unicode < 0x10000 then z = z..string.format('\\\\u%04x', unicode) else z = z..string.format('\\\\U%08x', unicode) end end return z end用法:
local json = require('json') local x = {['Ä'] = 0} local y = json.encode(x) print(y) --> {"Ä":0} local z = utf8_to_python(y) print(z) --> {"\\u00c4":0}