gpt4 book ai didi

utf-8 - Lua string.format 使用 UTF8 字符

转载 作者:行者123 更新时间:2023-12-01 03:34:32 25 4
gpt4 key购买 nike

如何使用 string.format 和包含 UTF-8 字符的字符串获得“正确”格式?

例子:

local str = "\xE2\x88\x9E"
print(utf8.len(str), string.len(str))
print(str)
print(string.format("###%-5s###", str))
print(string.format("###%-5s###", 'x'))

输出:
1   3

###∞ ###
###x ###

它看起来像 string.format使用无穷大符号的字节长度而不是“字符长度”。
是否有 UTF-8 string.format 等价物?

最佳答案

function utf8.format(fmt, ...)
local args, strings, pos = {...}, {}, 0
for spec in fmt:gmatch'%%.-([%a%%])' do
pos = pos + 1
local s = args[pos]
if spec == 's' and type(s) == 'string' and s ~= '' then
table.insert(strings, s)
args[pos] = '\1'..('\2'):rep(utf8.len(s)-1)
end
end
return (
fmt:format(table.unpack(args))
:gsub('\1\2*', function() return table.remove(strings, 1) end)
)
end

local str = "\xE2\x88\x9E"
print(string.format("###%-5s###", str)) --> ###∞ ###
print(string.format("###%-5s###", 'x')) --> ###x ###
print(utf8.format ("###%-5s###", str)) --> ###∞ ###
print(utf8.format ("###%-5s###", 'x')) --> ###x ###

关于utf-8 - Lua string.format 使用 UTF8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com