में यूनिकोड प्रतीक कैसे लिखें, मैं लूआ में यूनिकोड प्रतीक कैसे लिख सकता हूं। उदाहरण के लिए जब मैंलुआ
string.char(9658);
बारे में मैं एक त्रुटि मिला 9658
साथ प्रतीक लिखने के लिए की है। तो ऐसे प्रतीक को लिखना कैसे संभव है।
में यूनिकोड प्रतीक कैसे लिखें, मैं लूआ में यूनिकोड प्रतीक कैसे लिख सकता हूं। उदाहरण के लिए जब मैंलुआ
string.char(9658);
बारे में मैं एक त्रुटि मिला 9658
साथ प्रतीक लिखने के लिए की है। तो ऐसे प्रतीक को लिखना कैसे संभव है।
लुआ अंदर तार नहीं लगती है। तो, आप बस लिख सकते हैं
mychar = "►"
(2015 में) जोड़ा
लुआ 5.3 UTF-8 भागने दृश्यों के लिए शुरू की समर्थन:
UTF-8 यूनिकोड वर्ण की एन्कोडिंग हो सकता है एस्केप अनुक्रम \ यू {XXX} (ध्यान दें अनिवार्य संलग्नित कोष्ठक), जहां XXX एक या अधिक षोडश आधारी चरित्र कोड बिंदु का प्रतिनिधित्व अंक का एक क्रम है के साथ एक शाब्दिक स्ट्रिंग में डाला।
आप utf8.char(9658)
का भी उपयोग कर सकते हैं।
ध्यान दें कि यह केवल तभी काम करेगा यदि फ़ाइल स्वयं यूटीएफ -8 एन्कोडेड है। बेशक, आप दुभाषिया पर लुआ लिपि को तब तक नहीं फेंक सकते जब तक कि यह एएससीआईआई या यूटीएफ -8 नहीं है। –
हो सकता है कि यह आपकी मदद कर सकते हैं:
function FromUTF8(pos)
local mod = math.mod
local function charat(p)
local v = editor.CharAt[p]; if v < 0 then v = v + 256 end; return v
end
local v, c, n = 0, charat(pos), 1
if c < 128 then v = c
elseif c < 192 then
error("Byte values between 0x80 to 0xBF cannot start a multibyte sequence")
elseif c < 224 then v = mod(c, 32); n = 2
elseif c < 240 then v = mod(c, 16); n = 3
elseif c < 248 then v = mod(c, 8); n = 4
elseif c < 252 then v = mod(c, 4); n = 5
elseif c < 254 then v = mod(c, 2); n = 6
else
error("Byte values between 0xFE and OxFF cannot start a multibyte sequence")
end
for i = 2, n do
pos = pos + 1; c = charat(pos)
if c < 128 or c > 191 then
error("Following bytes must have values between 0x80 and 0xBF")
end
v = v * 64 + mod(c, 64)
end
return v, pos, n
end
मैं 'यकीन है कि समारोह में वह क्या चाहता है के विपरीत है कि हूँ। उनके पास यूनिकोड कोडपॉइंट है कि वह यूटीएफ -8 में एन्कोड करना चाहता है। –
विपरीत भी एक लंबा रास्ता तय कर सकते हैं! :) –
यूनिकोड स्ट्रिंग सामग्री के लिए व्यापक समर्थन प्राप्त करने के लिए, एक दृष्टिकोण slnunicode जो Selene डेटाबेस पुस्तकालय के हिस्से के रूप में विकसित किया गया है। यह आपको एक मॉड्यूल देगा जो मानक string
लाइब्रेरी के अधिकांश का समर्थन करता है, लेकिन यूनिकोड वर्ण और यूटीएफ -8 एन्कोडिंग के साथ।
यहाँ है कि एक यूनिकोड कोड बिंदु लेता है और इसी किरदार के लिए एक UTF-8 स्ट्रिंग का उत्पादन लुआ के लिए एक एनकोडर है:।
do
local bytemarkers = { {0x7FF,192}, {0xFFFF,224}, {0x1FFFFF,240} }
function utf8(decimal)
if decimal<128 then return string.char(decimal) end
local charbytes = {}
for bytes,vals in ipairs(bytemarkers) do
if decimal<=vals[1] then
for b=bytes+1,2,-1 do
local mod = decimal%64
decimal = (decimal-mod)/64
charbytes[b] = string.char(128+mod)
end
charbytes[1] = string.char(vals[2]+decimal)
break
end
end
return table.concat(charbytes)
end
end
c=utf8(0x24) print(c.." is "..#c.." bytes.") --> $ is 1 bytes.
c=utf8(0xA2) print(c.." is "..#c.." bytes.") --> ¢ is 2 bytes.
c=utf8(0x20AC) print(c.." is "..#c.." bytes.") --> € is 3 bytes.
c=utf8(0x24B62) print(c.." is "..#c.." bytes.") --> is 4 bytes.
यह पता है कि आप में जिसके परिणामस्वरूप स्ट्रिंग चाहते एन्कोडिंग मदद मिलेगी – MattJ