Название: Как вывести русский текст в нужной кодировке на Linux Отправлено: Vladimir от Декабрь 08, 2011, 12:39 Доброго дня) подскажите пожалуйста как в Linux установить программно русский текст в различных элементах: кнопках, статик тексте и т.д.
Код: QStringList lst; Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Пантер от Декабрь 08, 2011, 12:41 Ну, сколько же можно задавать один и тот же вопрос по несколько раз в неделю? Читай мою подпись или воспользуйся поиском.
Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Vladimir от Декабрь 08, 2011, 12:48 Согласен, вопрос уже наверное приелся) нашел как.. Код: QStringList lst; Повторение - мать учения !!! =))) Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: GreatSnake от Декабрь 08, 2011, 12:50 Это не решение - это костыль.
Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Vladimir от Декабрь 08, 2011, 12:56 Это не решение - это костыль. В смысле?! Так работает, а что в этом методе хромого?)) Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Пантер от Декабрь 08, 2011, 12:57 В смысле?! Так работает, а что в этом методе хромого?)) Всё.Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: GreatSnake от Декабрь 08, 2011, 13:03 В смысле?! Так работает, а что в этом методе хромого?)) В исходниках нет возможности указать кодировку.Другой юзер отредактирует этот код в другом редакторе или в другой кодировке и всё - поплывёт твой русский. Поэтому все строковые "неродные" константы в коде нужно прописывать на английском или в isoLatin1 в tr() и уже потом переводить на русский и какой ещё язык. И это должно быть правилом. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Декабрь 08, 2011, 19:43 В смысле?! Так работает, а что в этом методе хромого?)) В исходниках нет возможности указать кодировку.Другой юзер отредактирует этот код в другом редакторе или в другой кодировке и всё - поплывёт твой русский. Поэтому все строковые "неродные" константы в коде нужно прописывать на английском или в isoLatin1 в tr() и уже потом переводить на русский и какой ещё язык. И это должно быть правилом. А если в выставлен кодек для си строк, то дважды не будет. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: GreatSnake от Декабрь 08, 2011, 19:52 Если править файл в его кодировке, то проблем не будет. "в его кодировке" - эта инфа где-то прописывается? Нет, поэтому чушь несёшь.А если в выставлен кодек для си строк, то дважды не будет. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Декабрь 08, 2011, 20:53 Если править файл в его кодировке, то проблем не будет. "в его кодировке" - эта инфа где-то прописывается? Нет, поэтому чушь несёшь.А если в выставлен кодек для си строк, то дважды не будет. у меня на работе все проекты в кои. и под виндой компилятся и проблем с русским нет. и tr нигде не юзатся. потому что никогда не нужно будет. проекты закрытые. я не агитирую конечно, это просто в качестве исключения. я к тому, что иногда если нет необходимости можно и не заморачиваться. зато я в коде пишу QString s = "блабла"; и этот код нормально компилится под виндой. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Декабрь 08, 2011, 20:54 плюс современные редакторы практически со 100% вероятностью определяют кодировку файла.
Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: thechicho от Февраль 20, 2012, 19:37 andrew.k
если бы в мануале написали, перед тем как переводить через лингвист, сделайте сальто назад. они б сделали :D -зачем? - все по мануалу! как доктор прописал :D Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 21, 2012, 18:34 В смысле?! Так работает, а что в этом методе хромого?)) Никогда не пиши программы по принципу "раз работает, значит пойдёт". То что пытаешься сделать описано в 1) стандарте С++ 2) документации Qt. Правильный способ - использовать английский текст и переводить его через tr(): Код
Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 19:22 Никогда не пиши программы по принципу "раз работает, значит пойдёт". То что пытаешься сделать описано в 1) стандарте С++ 2) документации Qt. Правильный способ - использовать английский текст и переводить его через tr(): Так и написано "Единственно правильный способ"?Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 21, 2012, 19:28 Никогда не пиши программы по принципу "раз работает, значит пойдёт". То что пытаешься сделать описано в 1) стандарте С++ 2) документации Qt. Правильный способ - использовать английский текст и переводить его через tr(): Так и написано "Единственно правильный способ"?Правильный - да. Возможный - нет. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 19:29 Никогда не пиши программы по принципу "раз работает, значит пойдёт". То что пытаешься сделать описано в 1) стандарте С++ 2) документации Qt. Правильный способ - использовать английский текст и переводить его через tr(): Так и написано "Единственно правильный способ"?Правильный - да. Возможный - нет. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: sergek от Февраль 21, 2012, 19:39 Цитировать Другой юзер отредактирует этот код в другом редакторе или в другой кодировке и всё - поплывёт твой русский. Пытаюсь представить себе эту ситуацию и никак... Этот, другой, когда открывает текст для правок, не видит, что он в кракозябрах? Или он корректирует какую-то часть, не обращая внимания на остальной текст?Если программа интернациональная, наверное, вариантов нет, кроме выбора единого языка. Ну, пусть будет американский. А если проект русскоязычный? Зачем такие сложности, не проще ли команде разработчиков договориться о кодировке исходников? Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 19:46 Цитировать Другой юзер отредактирует этот код в другом редакторе или в другой кодировке и всё - поплывёт твой русский. Пытаюсь представить себе эту ситуацию и никак... Этот, другой, когда открывает текст для правок, не видит, что он в кракозябрах? Или он корректирует какую-то часть, не обращая внимания на остальной текст?А если проект русскоязычный? Зачем такие сложности, не проще ли команде разработчиков договориться о кодировке исходников? Обычно так и происходит либо сразу, либо после столкновения с кракозябрами.А комментарии тоже предлагается на английском писать? Если люди не в состоянии понимать, что такое кодировка файла, тут ничем не поможешь, никакие нано-технологии не спасут) UPD: Alex Gustov, Всегда все комментарии на английском. Это единственное правильное решение. Так? Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 21, 2012, 19:58 А где это написано можешь привести? Да, ISO/IEC 14882 "Programming languages- C++" Цитировать 2.1.1 Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary. Trigraph sequences (2.3) are replaced by corresponding single-character internal representations. Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates that character. (An implementation may use any internal encoding, so long as an actual extended character encountered in the source file, and the same extended character expressed in the source file as a universal-character-name (i.e. using the \uXXXX notation), are handled equivalently.) 2.2.1 The basic source character set consists of 96 characters: the space character, the control characters representing horizontal tab, vertical tab, form feed, and new-line, plus the following 91 graphical characters:15) a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _ { } [ ] # ( ) < > % : ; . ? * + - / ˆ & | ˜ ! = , \ " ’ Qt manual: Цитировать However, if you want to write portable code, we recommend that you avoid non-ASCII characters in your source files. You can still specify non-ASCII characters portably using escape sequences, for example: label->setText(tr("F\374r \310lise")); Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 20:13 В приведенном отрывке стандарта вводится понятие базового набора символов (base character set) и описание процесса работы с символами которые не входят в базовый набор.
Разве отсюда следует, что нужно и/или можно использовать только базовый? Насчет второго отрывка: "...if you want to write portable code, we recommend...". Это рекомендация. Что ты посоветуешь насчет комментариев? Ты тактично умолчал. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 21, 2012, 20:26 В приведенном отрывке стандарта вводится понятие базового набора символов (base character set) и описание процесса работы с символами которые не входят в базовый набор. Разве отсюда следует, что нужно и/или можно использовать только базовый? "Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates". Отсюда в gcc на разных платформах иногда начинают лезть ошибки типа "stray \xxx\xxx..." in program. Насчет второго отрывка: "...if you want to write portable code, we recommend...". Это рекомендация. Рекомендация чтобы писать портабельный код. Ты МОЖЕШЬ писать непортабельный код, но будет ли он согласовываться со стандартом - это отдельный вопрос. В твоём случае не будет. Что ты посоветуешь насчет комментариев? Ты тактично умолчал. А что тут говорить, по стандарту - нельзя. По факту - можно, т.к. все известные мне реализации тупо пропускают текст между символами комментария /* */ или //, то есть писать там можно всё что угодно. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 22:32 В приведенном отрывке стандарта вводится понятие базового набора символов (base character set) и описание процесса работы с символами которые не входят в базовый набор. "Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates". Отсюда в gcc на разных платформах иногда начинают лезть ошибки типа "stray \xxx\xxx..." in program.Разве отсюда следует, что нужно и/или можно использовать только базовый? Но никак не о том, что так делать нельзя. Насчет второго отрывка: "...if you want to write portable code, we recommend...". Это рекомендация. Рекомендация чтобы писать портабельный код. Ты МОЖЕШЬ писать непортабельный код, но будет ли он согласовываться со стандартом - это отдельный вопрос. В твоём случае не будет.Если я точно знаю, что мне не потребуется локализация моего приложения. То зачем мне tr? Одни и те же исходники с русским строками прекрасно собираются и в линукс, и в винде. Без каких либо конвертаций и преобразований. И нет никаких "модных" проблем с кодировкой. Может я что-то не так делаю? ) Что ты посоветуешь насчет комментариев? Ты тактично умолчал. А что тут говорить, по стандарту - нельзя. По факту - можно, т.к. все известные мне реализации тупо пропускают текст между символами комментария /* */ или //, то есть писать там можно всё что угодно. Ты привел текст в котором написано, что не ASCII-символы при компиляции будут заменены на последовательность вида \xxx. Почему отсюда вывод, что нельзя? Пока не убедил. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 21, 2012, 22:57 Это говорит лишь об ущербности этой версии или о том, что она как раз не поддерживает universal-character-name. Но никак не о том, что так делать нельзя. Конечно нельзя, пример с UTF BOM - яркий пример. В gcc не зря есть флаг, который задаёт кодировку исходника, совсем не зря. Это смотря насколько широко рассматривать портабельность. Если я точно знаю, что мне не потребуется локализация моего приложения. То зачем мне tr? Одни и те же исходники с русским строками прекрасно собираются и в линукс, и в винде. Без каких либо конвертаций и преобразований. И нет никаких "модных" проблем с кодировкой. Может я что-то не так делаю? ) Ты просто живёшь в счастливое время UTF-8. Скажем, лет восемь назад в том же Линуксе у всех были разные локали, и исходники написанные в разных дистрибутивах имели бы разную кодировку. Если это работает здесь и сейчас - хорошо. Является ли это правильным решением? Ответь сам на вопрос. Стандарт ведь не дураки пишут ;) Между прочим, аналогичная ситуация с ID3 тегами в MP3. Да почему нельзя-то никак не пойму? Ты привел текст в котором написано, что не ASCII-символы при компиляции будут заменены на последовательность вида \xxx. Почему отсюда вывод, что нельзя? Я подумал, и в принципе здесь ты прав, потому что опять же исходя из реалий, что компилятор просто пропускает этот текст. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 21, 2012, 23:23 Это говорит лишь об ущербности этой версии или о том, что она как раз не поддерживает universal-character-name. Конечно нельзя, пример с UTF BOM - яркий пример. В gcc не зря есть флаг, который задаёт кодировку исходника, совсем не зря.Но никак не о том, что так делать нельзя. Таким же успехом, можно говорить, что исходники написанные в 4.6, не компилятся в 4.4. И делать из этого вывод о непортируемости. Ты просто живёшь в счастливое время UTF-8. Скажем, лет восемь назад в том же Линуксе у всех были разные локали, и исходники написанные в разных дистрибутивах имели бы разную кодировку. Если это работает здесь и сейчас - хорошо. Является ли это правильным решением? Ответь сам на вопрос. Я и пишу исходники в это же самое счастливое время ;)Но пример, который я приводил, там исходники в кодировке koi8-r как это не печально и они с успехом компилятся под виндой и не имеют проблем с русским языком (это конечно благодаря великому и могучему Qt : ). Стандарт ведь не дураки пишут ;) Между прочим, аналогичная ситуация с ID3 тегами в MP3. Конечно не дураки, но пока что мы не обнаружили строк, которые запрещают использовать в исходниках символы отличные от ASCII (Пантер, наверное с ума сходит, читая этот тред : ). Я хочу чтобы меня аргументированно убедили.Да почему нельзя-то никак не пойму? Ты привел текст в котором написано, что не ASCII-символы при компиляции будут заменены на последовательность вида \xxx. Почему отсюда вывод, что нельзя? Я подумал, и в принципе здесь ты прав, потому что опять же исходя из реалий, что компилятор просто пропускает этот текст. Я думаю, это сделано лишь для обратной совместимости, для того, чтобы старые версии компиляторов могли внятно объяснить, почему этот исходник не может быть скомпилен (я могу ошибаться). Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 22, 2012, 00:13 Конечно не дураки, но пока что мы не обнаружили строк, которые запрещают использовать в исходниках символы отличные от ASCII (Пантер, наверное с ума сходит, читая этот тред : ). Я хочу чтобы меня аргументированно убедили. Как это не обнаружили? "Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary". И далее: "Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates that character.", а это значит, что все строковые литералы зависят от кодировки файла! Поменял кодировку - и тю-тю. Откуда компилятор знает, что ты имел ввиду? Он тупо перегонит всё в \xxx... и всё, дальше его не волнует, что русская буква "a" оказалась не на том месте в текущей кодировке. Как это пропускает, если printf("Очень русский текст\n"); выведет на консоль сам знаешь что) Я думаю, это сделано лишь для обратной совместимости, для того, чтобы старые версии компиляторов могли внятно объяснить, почему этот исходник не может быть скомпилен (я могу ошибаться). Речь шла о комментариях, а не о самом коде. Раз уж ты затронул printf, то покажу кое что с этим printf-ом: Цитировать $ ./qt4-template ����� ������� ����� Упс. А где русский текст? Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Bepec от Февраль 22, 2012, 09:32 Алекс вы не приводите аргументов, а пытаетесь убедить, что "Это плохо."
% 80 тем на этом форуме, в проблемах с русским языком в исходниках неаргументированны. И САМЫЙ ГЛАВНЫЙ ФАКТ: Я тоже пользовался Английским в программах, ибо лингвист отказывался понимать windows-1251 и переводить его в иные языки. НО, посмотрев исходники, оказалось что в версии Qt SDK 4.7.2 в lrelease и lupdate статически прилинкованы кодеки БЕЗ windows-1251 ;) Это засада со стороны троллей... Скачивание исходников - компилирование. И через 5 минут у меня появились утилиты, поддерживающие Великий и Могучий. Коими пользуюсь и сейчас. Главный аргумент - Открой любой форматированный файл в другой кодировке, отличной от исходной. Он сохранит работоспособность? :P Вот и не стоит упирать на "а вдруг, кто то пересохранит". update: кстати а что делать, если человек который будет смотреть проект, незнает английского? :) Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Пантер от Февраль 22, 2012, 09:50 update: кстати а что делать, если человек который будет смотреть проект, незнает английского? :) Значит этот человек не нужен.Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Bepec от Февраль 22, 2012, 09:55 Пантер, вот ненадо фатализма ;) Есть нужные люди, незнающие английского. И не обязательно программные.
Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Пантер от Февраль 22, 2012, 10:15 Пантер, вот ненадо фатализма ;) Есть нужные люди, незнающие английского. И не обязательно программные. Эм. А нафига не программисту смотреть код? О_оНазвание: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 22, 2012, 10:32 Конечно не дураки, но пока что мы не обнаружили строк, которые запрещают использовать в исходниках символы отличные от ASCII (Пантер, наверное с ума сходит, читая этот тред : ). Я хочу чтобы меня аргументированно убедили. Как это не обнаружили? "Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary". И далее: "Any source file character not in the basic source character set (2.2) is replaced by the universal-character-name that designates that character.", а это значит, что все строковые литералы зависят от кодировки файла! Поменял кодировку - и тю-тю. Откуда компилятор знает, что ты имел ввиду? Он тупо перегонит всё в \xxx... и всё, дальше его не волнует, что русская буква "a" оказалась не на том месте в текущей кодировке. Похоже конструктив иссяк и началось приперательство. По поводу этого абзаца, я уже писал, что думаю. Если аргумент не убедил оппонента, его нужно повторять снова и снова? Тогда: из него не следует, что так делать нельзя. Речь шла о комментариях, а не о самом коде. Значит я не уловил твою мысль.Раз уж ты затронул printf, то покажу кое что с этим printf-ом: Ну ты сам все прекрасно понимаешь. Воспользуйся поиском ;)Цитировать $ ./qt4-template Упс. А где русский текст?����� ������� ����� Я могу такой же пример с printf привести, где русский будет прекрасно выводиться. Код: $ ./a.out А если подробно рассмотреть этот пример с printf. То нужно понять, о чем мы говорим. О gcc или о Qt? Если первое. То скомпили этот исходник только с помощью gcc без использования qt. Проблема собственно в самом Qt. В том, что по умолчанию он для const char* строк использует кодировку latin1, в которой нет набора русских символов. Хотя в твоем примере, скорее проблема в кодировке файла. Вывод: в этом примере и собственно по теме, проблема не в компиляторе, а в особенностях Qt. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Alex Custov от Февраль 22, 2012, 12:00 А если подробно рассмотреть этот пример с printf. То нужно понять, о чем мы говорим. О gcc или о Qt? Хоть что, пример-то просто с printf, а не с qDebug. Можно и с gcc, можно и с Qt. Хотя в твоем примере, скорее проблема в кодировке файла. Да ну, не может этого быть :) А как же "у меня всё работает"? А у меня не работает. Потому что счастливое стечение обстоятельств у меня не произошло. Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: Bepec от Февраль 22, 2012, 12:13 У тебя не работает ТВОЯ программа, которую ты написал НЕПРАВИЛЬНО ;)
Моя программа, с точным указанием кодеков будет работать ПРАВИЛЬНО ;) PS я могу молотком тебе по лбу стукнуть ;) И скажу - гвозди не забиваются, плохой молоток. А могу ведь и по гвоздю ;) Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: andrew.k от Февраль 22, 2012, 13:28 А если подробно рассмотреть этот пример с printf. То нужно понять, о чем мы говорим. О gcc или о Qt? Хоть что, пример-то просто с printf, а не с qDebug. Можно и с gcc, можно и с Qt. Хотя в твоем примере, скорее проблема в кодировке файла. Да ну, не может этого быть :) А как же "у меня всё работает"? А у меня не работает. Потому что счастливое стечение обстоятельств у меня не произошло. Раз все так прекрасно и переносимо, что же в самом креаторе кракозябры в консоли сборки? А? Название: Re: Как вывести русский текст в нужной кодировке на Linux Отправлено: sergek от Февраль 22, 2012, 23:12 Цитировать Проблема собственно в самом Qt. В том, что по умолчанию он для const char* строк использует кодировку latin1, в которой нет набора русских символов. Хороший пример. Могу дополнить примером с PythonQt, в котором для поддержки русского нужно в двух местах заменить toLatin1 на toAscii (http://www.prog.org.ru/topic_17773_0.html (http://www.prog.org.ru/topic_17773_0.html)). А сколько в сети программ, в которых поддерживается пара десятков языков за исключением русского? Это приносит свои плоды, уже находятся люди, которые заявляют, что программист, не знающий американского, не нужен... Может, поэтому в сети все чаще встречаются люди, которые плохо знают русский? Грустно, коллеги... |