История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
string.reverse
если у тебя не переопределён переворачивает байты, а один символ в utf-8
может состоять из нескольких байтов. Кирилица состоит из 2х
байтов (uint16_t, а не uint8_t) на символ. Их порядок следования должен быть сохранён при развороте строки, а string.reverse()
работает только с одиночными байтами, поэтому превращает utf-8
кодировку в мусор.
dron@gnu:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(string.reverse('П0:ПЖ1:М5160'))
0615��:1��:0��
> print(string.reverse('hello my friend'))
dneirf ym olleh
Возьми функцию которая переворачиват utf-8
строку для utf-8
function utf8.reverse(str)
local out = "";
for id,code in utf8.codes(str) do
out = utf8.char(code)..out;
end
return out;
end
print(utf8.reverse('П0:ПЖ1:М5160'));
dron@gnu:~$ lua5.4 ttt.lua
0615М:1ЖП:0П
dron@gnu:~$
Работай с utf8
только через utf8
функции, если чего не хватает дописывай сам. Как пример с utf8.reverse
так как символ может состоять из 1,2,3,4 байтов.
Исправление LINUX-ORG-RU, :
string.reverse
если у тебя не переопределён переворачивает байты, а один символ в utf-8
может состоять из нескольких байтов. Кирилица состоит из 2х
байтов (uint16_t, а не uint8_t) на символ. Их порядок следования должен быть сохранён при развороте строки, а string.reverse()
работает только с одиночными байтами, поэтому превращает utf-8
кодировку в мусор.
dron@gnu:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(string.reverse('П0:ПЖ1:М5160'))
0615��:1��:0��
> print(string.reverse('hello my friend'))
dneirf ym olleh
Возьми функцию которая переворачиват utf-8
строку для utf-8
function utf8.reverse(str)
local out = "";
for id,code in utf8.codes(str) do
out = utf8.char(code)..out;
end
return out;
end
print(utf8.reverse('П0:ПЖ1:М5160'));
dron@gnu:~$ lua5.4 ttt.lua
0615М:1ЖП:0П
dron@gnu:~$
Работай с utf8
только через utf8
функции, если чего не хватает дописывай сам. Как пример с utf8.reverse
Исправление LINUX-ORG-RU, :
string.reverse
если у тебя не переопределён переворачивает байты, а один символ в utf-8
может состоять из нескольких байтов. Кирилица состоит из 2х
байтов (uint16_t, а не uint8_t) на символ. Их порядок следования должен быть сохранён при развороте строки, а string.reverse()
работает только с одиночными байтами, поэтому превращает utf-8
кодировку в мусор.
dron@gnu:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(string.reverse('П0:ПЖ1:М5160'))
0615��:1��:0��
> print(string.reverse('hello my friend'))
dneirf ym olleh
Возьми функцию которая переворачиват utf-8
строку для utf-8
function utf8.reverse(str)
local out = "";
for id,code in utf8.codes(str) do
out = utf8.char(code)..out;
end
return out;
end
print(utf8.reverse('П0:ПЖ1:М5160'));
dron@gnu:~$ lua5.4 ttt.lua
0615М:1ЖП:0П
dron@gnu:~$
Исправление LINUX-ORG-RU, :
string.reverse
если у тебя не переопределён переворачивает байты, а один символ в utf-8
может состоять из нескольких байтов. Кирилица состоит из 2х
байтов (uint16_t, а не uint8_t) на символ. Их порядок следования должен быть сохранён при развороте строки, а string.reverse()
работает только с одиночными байтами, поэтому превращает utf-8
кодировку в мусор.
dron@gnu:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(string.reverse('П0:ПЖ1:М5160'))
0615��:1��:0��
> print(string.reverse('hello my friend'))
dneirf ym olleh
Возьми функцию которая переворачиват utf-8
строку для utf-8
function utf8.reverse(str)
local out = ""
for id,code in utf8.codes(str) do
out = utf8.char(code)..out
end
return out
end
print(utf8.reverse('П0:ПЖ1:М5160'))
dron@gnu:~$ lua5.4 ttt.lua
0615М:1ЖП:0П
dron@gnu:~$
Исходная версия LINUX-ORG-RU, :
string.reverse
если у тебя не переопределён переворачивает байты, а один символ в utf-8
может состоять из нескольких байтов. Кирилица состоит из 2х
байтов (uint16_t, а не uint8_t) на символ. Их порядок следования должен быть сохранён при развороте строки.
dron@gnu:~$ lua
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(string.reverse('П0:ПЖ1:М5160'))
0615��:1��:0��
> print(string.reverse('hello my friend'))
dneirf ym olleh
Возьми функцию которая переворачиват utf-8
строку для utf-8
function utf8.reverse(str)
local out = ""
for id,code in utf8.codes(str) do
out = utf8.char(code)..out
end
return out
end
print(utf8.reverse('П0:ПЖ1:М5160'))
dron@gnu:~$ lua5.4 ttt.lua
0615М:1ЖП:0П
dron@gnu:~$