LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

string.reverse если у тебя не переопределён переворачивает байты, а один символ в utf-8 может состоять из нескольких байтов. Кирилица состоит из байтов (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 может состоять из нескольких байтов. Кирилица состоит из байтов (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 может состоять из нескольких байтов. Кирилица состоит из байтов (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 может состоять из нескольких байтов. Кирилица состоит из байтов (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 может состоять из нескольких байтов. Кирилица состоит из байтов (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:~$