lua смена регистров кириллицы
> os.setlocale('rus_rus.866')
> print(string.upper('тест'
ТЕСТ
>
не работает
не работаетУ меня это работает. Очевидно, ты либо не понял идею, либо что-то делаешь не так. Например, ставишь 866 страницу в UTF-8 консоли.
Сообщение удалил
а еще варианты есть?
хз, у меня в юникодной локали тоже не работает, а вот в koi8-r - все работает отлично
и че делать?
ну хорошо, как с помощью lua вывести юникод символа?
вывести юникод символа?ммм, вроде русский язык придумали в вашей стране, а говорите все так, что нихера понять невозможно.
а что непонятно?
что такое юникод символа и зачем тебе его получать в lua
и че делать?Ставить правильную локаль. Все правильно написанные сишные программы работают с русским языком в любой консоли. (По крайней мере в винде это так, и я удивлюсь, если консоли в *х чем-то хуже.)
что такое юникод символа и зачем тебе еХорошо у меня задача есть строка например "строка", в которой все символы - кириллица. Нужно написать скрипт, который на выходе давал, все варианты с верхними и нижними регистрами, т.е. :
слово
Слово
сЛово
слОво
слоВо
словО
СЛово
сЛОво
...и т. д.
в случае строки из n символов должен давать 2^n вариантов.
з.ы. Юникод это если не ошибаюсь UTF-16
как с помощью lua вывести юникод символа?Очень интересно, что такое юникод символа. Lua написан на char-ах, и поэтому из юникода он совместим только с UTF-8. Напиши программу в файле с этой кодировкой, и работай с ней в UTF-8 консоли. Это под *x, под виндой можно работать в 1251 или 866.
что значит " работай с ней в UTF-8 консоли " ?
я под линуксом сижу, к слову.
черт с ним с lua, как на С/С++ это сделать? (сменить регистр или вывести UTF-16 код символа) ?
я под линуксом сижу, к слову.Ну надо же, наконец-то появилась информация, которую нужно было дать в первом посте. Ты должен задать подходящую для сишной библиотеки локаль через os.setlocale и сохранить текст lua программы в такой же кодировке. Если ты запускаешь интерпретатор из консоли, то тебе нужно установить такую же локаль в консоли.
os.setlocale('rus_rus.866')
os.setlocale ("ru_RU.CP1251")
os.setlocale ("Russian_Russia.1251")
ничего из этого не работает
http://lua-users.org/lists/lua-l/2005-05/msg00317.html
судя по этой штуке три года назад народ жаловался на неполную поддержку utf-8 в lua
(я уверен, что говоря про юникод ты подразумевал UTF-8 а не UTF-16)
отсюда вывод - надо пользоваться не юникодной локалью
судя по этой штуке три года назад народ жаловался на неполную поддержку utf-8 в lua
(я уверен, что говоря про юникод ты подразумевал UTF-8 а не UTF-16)
отсюда вывод - надо пользоваться не юникодной локалью
os.setlocale('rus_rus.866')кроме этих команд нужно чтобы исходная строка (которую ты пытаешься перевести) была в той же кодировке
os.setlocale ("ru_RU.CP1251")
os.setlocale ("Russian_Russia.1251")
ничего из этого не работает
Какие локали еще?Почитай мануал к стандартной сишной библиотеке.
Тебе нужно "ru_RU.866" и сохранить файл скрипта в той же самой кодировке (866). Что такое locale, codepage, и так далее можно почитать в википедии.
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
соответсвенно я должен что сделать? iconvom поменять кодировку файла скрипта?
echo тест |iconv -t koi8-r | lua -e "os.setlocale('ru_RU.KOI8-R'); a=io.read; print(string.upper(a" | iconv -f koi8-r
просто поменять кодировку скрипта - мало, надо чтобы в коде эта кодировка правильно указывалась.
$ iconv -f UTF-8 -t 866 2
#!/usr/bin/lua
os.setlocale('ru_ru.866')
--os.setlocale ("ru_RU.CP1251")
--os.setlocale ("Russian_Russia.1251")
print(string.upper('����'
$ lua 2
рука
ниче не меняет зараза.
и ещё - если у тебя будут подаваться на вход какие-либо данные, то тебе их придётся перекодировать из юникода в нужную тебе кодировку.
ниче не меняет зараза.потому что ты не прочитал нормально мануал по iconv
сделай
iconv -f UTF-8 -t cp866 2 > 3
lua 3 | iconv -f cp866 -t UTF-8
conv -f UTF-8 -t cp866 2 > 3 ./3 | iconv -f cp866 -t UTF-8
#!/usr/bin/lua
os.setlocale('ru_ru.866')
print(string.upper('рука'
$ iconv -f UTF-8 -t cp866 2 > 3
$ lua 3 | iconv -f cp866 -t UTF-8
рука
ппц.
os.setlocale('ru_ru.866')ты откуда такую строчку придумал?
рекомендую проверить результат этого действия вот так
print(os.setlocale('ru_ru.866'
ну и заодно сравнить с
print(os.setlocale('ru_RU.KOI8-R'
после этого почитать документацию и понять, где ошибка
работает только :
os.setlocale("ru_RU.utf8")
в документации что на lua.org ниче не нарыл.
http://www.lua.ru/doc/5.8.html#pdf-os.setlocale
локаль-то у тебя в системе есть та, которую ты пытаешься выставить?
что выдаёт locale -a
локаль-то у тебя в системе есть та, которую ты пытаешься выставить?
что выдаёт locale -a
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
ru_RU.utf8
ru_UA.utf8
видимо нужно доваить локаль в систему...
(Не важно в какой кодировке - utf-8/16/... всего-лишь байтовое представление)
Соответственно тебе не локали надо выставлять (хотя в первом случае это тоже понадобится а либо преобразовать строку в однобайтовую кодировку (koi8-r, iso8859-15, cp1251, cp866) и юзать однобайтовые lower/upper или заботать что-то типа этого
зы
чо-та долго писал
если дебиан/убунта, то расово верным методом будет sudo dpkg-reconfigure locales
sudo dpkg-reconfigure locales
Generating locales...
en_AU.UTF-8... up-to-date
en_BW.UTF-8... up-to-date
en_CA.UTF-8... up-to-date
en_DK.UTF-8... up-to-date
en_GB.UTF-8... up-to-date
en_HK.UTF-8... up-to-date
en_IE.UTF-8... up-to-date
en_IN.UTF-8... up-to-date
en_NZ.UTF-8... up-to-date
en_PH.UTF-8... up-to-date
en_SG.UTF-8... up-to-date
en_US.UTF-8... up-to-date
en_ZA.UTF-8... up-to-date
en_ZW.UTF-8... up-to-date
ru_RU.UTF-8... up-to-date
ru_UA.UTF-8... up-to-date
Generation complete.
Зараза, никаких 866 и подавно! насчет однобайтовых кодировок, это icoinvom сначала в кои8-r а потом обратно в utf-8?
попробуй dpkg-reconfigure -p low locales
По крайней мере у меня спрашивал всегда
Да, гонять туда-сюда иконвом. Можно программно, а не через шелл
Да, гонять туда-сюда иконвом. Можно программно, а не через шеллесть, кстати, вот такая штука
http://luaforge.net/projects/lua-iconv/
я бы слово на входе преобразовал в личный нумерованный алфавит и задал пару табличек — заглавные и прописные буквы.
красота этого кода явно не стоит трёх часов поиска истины на форуме =)
Lua 5.1.3 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require("utf8data")
> require("utf8")
> print(string.utf8upper("ыЫы"
ЫЫЫ
и какого размера этот модулёк? =)
2к строк
древние шумеры очень расстроятся если у них это не заработает =)
омг, так и знал чито для ВоВа писали
Я кстати не в курсе, у них было разделение на регистры?
хз, при первой встрече спрошу обязательно
омг, так и знал чито для ВоВа писалиомг, ты знаешь что такое oUF!?
к сожалению я теперь знаю что такое вов, но плагины к нему я ещё писать не начал =)
Но вот вопрос:
>s = {}
>s = "ПРЕВЕД"
>print string.len(s)
>print (s[0], s[1], s[2])
>print(string.sub(s, 1,1
12
nil nil nil
nil
Как же мне вывести i-тый символ строки, если кириллица?
Там все есть
зашибись, скачал все работает АЕ! спасибо большое!
Оставить комментарий
Xomiak09
собственно сабж. Нужно поменять маленькую букву н заглавную, а string.upper, string.lower с кириллицей не работают