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")
ничего из этого не работает
извини за ламерство. Можешь пример привести, плиз! К слову , я проверил :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, и так далее можно почитать в википедии.
locale:
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 поменять кодировку файла скрипта?
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'
после этого почитать документацию и понять, где ошибка
и то и другое выдает nil
работает только :
os.setlocale("ru_RU.utf8")
в документации что на lua.org ниче не нарыл.
работает только :
os.setlocale("ru_RU.utf8")
в документации что на lua.org ниче не нарыл.
http://www.lua.ru/doc/5.8.html#pdf-os.setlocale
локаль-то у тебя в системе есть та, которую ты пытаешься выставить?
что выдаёт locale -a
локаль-то у тебя в системе есть та, которую ты пытаешься выставить?
что выдаёт locale -a
C
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
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
видимо нужно доваить локаль в систему...
Если мне не изменяет память, в 90 процентах случаев нет нормального преобразования регистров для уникода.
(Не важно в какой кодировке - utf-8/16/... всего-лишь байтовое представление)
Соответственно тебе не локали надо выставлять (хотя в первом случае это тоже понадобится а либо преобразовать строку в однобайтовую кодировку (koi8-r, iso8859-15, cp1251, cp866) и юзать однобайтовые lower/upper или заботать что-то типа этого
зы
чо-та долго писал
(Не важно в какой кодировке - 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
По крайней мере у меня спрашивал всегда
Да, гонять туда-сюда иконвом. Можно программно, а не через шелл
попробуй 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("ыЫы"
ЫЫЫ
и какого размера этот модулёк? =)
фи, он явно весь юникод не покрывает
древние шумеры очень расстроятся если у них это не заработает =)
омг, так и знал чито для ВоВа писали
древние шумеры очень расстроятся если у них это не заработает =)
омг, так и знал чито для ВоВа писали
Ничо, порасстраиваются и патч отошлют 
Я кстати не в курсе, у них было разделение на регистры?

Я кстати не в курсе, у них было разделение на регистры?

хз, при первой встрече спрошу обязательно
омг, так и знал чито для ВоВа писалиомг, ты знаешь что такое oUF!?

к сожалению я теперь знаю что такое вов, но плагины к нему я ещё писать не начал =)
да действительно, с помощью двух табличек {а, б, в, г, ....} { А, Б, В,Г, ...} замена одного символа решается тривиально.
Но вот вопрос:
Как же мне вывести i-тый символ строки, если кириллица?
Но вот вопрос:
>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 с кириллицей не работают