Опрос: кто-нибудь реально использует юникодные исходники?
Связанные вопросы далее.
Собственно проблему я в основном вижу в описании литералов вида L"русский текст" при ANSI исходнике. Приходится либо писать
1) коды символов через escape последовательности — муторно
2) #pragma setlocale (для Microsoft Visual Studio) — некрасиво
3) в рантайме переводить в юникод строки по заданной кодовой странице — тем более не айс
Visual Studio умеет компилировать некоторые виды юникодных исходников (кажется, UTF-8, UTF-16). На других компиляторах не проверял. =) И вообще, регулируется ли это стандартом?
На вскидку я вижу такие минусы юникодных исходников — не все редакторы поймут, а также скорее всего не все программы, которые смотрят File Difference это поймут (опять же не проверял).
Здравствуйте, Sir-G, Вы писали:
SG>Опрос: кто-нибудь реально использует юникодные исходники?
Да
SG>Связанные вопросы далее. SG>Собственно проблему я в основном вижу в описании литералов вида L"русский текст" при ANSI исходнике
-отлично перекодируються в юникод, вы высасали из пальца несуществующую проблему. SG>. Приходится либо писать SG>1) коды символов через escape последовательности — муторно SG>2) #pragma setlocale (для Microsoft Visual Studio) — некрасиво SG>3) в рантайме переводить в юникод строки по заданной кодовой странице — тем более не айс
WTF? Усе работает и так. Если пользуетесь VS — попробуйте вставить к примеру китайский иероглиф — сама предложит перекодировать файл в unicode.
Насчет перевода строк в рантайме в юникод вообще не понял. Какой смысл расширять кодовую таблицу если оригинальные строки закодированы в меньшей?
SG>Visual Studio умеет компилировать некоторые виды юникодных исходников (кажется, UTF-8, UTF-16). На других компиляторах не проверял. =) И вообще, регулируется ли это стандартом?
Регулируеться компилятором. Студия отлично работает с utf-8 и другими вариациями юникода — если сможет распознать. И с ansi и со всеми иными вариациями вроде ANCI CP 1251, в соответствии с системными настройками;
GCC по дефолту дружит с utf-8. Но через параметры можно указать любую другую кодировку что для исходников, что для строк выходных файлов.
SG>На вскидку я вижу такие минусы юникодных исходников — не все редакторы поймут, а также скорее всего не все программы, которые смотрят File Difference это поймут (опять же не проверял).
Это какие редакторы не поймут? Даже notepad с unicod-ом дружит. И с File Defference проблем нет. Особенно для utf-8.
Здравствуйте, 11molniev, Вы писали:
SG>>Собственно проблему я в основном вижу в описании литералов вида L"русский текст" при ANSI исходнике 1>-отлично перекодируються в юникод, вы высасали из пальца несуществующую проблему.
Эх, если бы... =) Перекодировка происходит по системной кодовой странице, которая на другой машине может быть английская. Я уж не говорю, что таким способом литералы на нескольких языках (например, еще французском) не написать в принципе.
1>WTF? Усе работает и так. Если пользуетесь VS — попробуйте вставить к примеру китайский иероглиф — сама предложит перекодировать файл в unicode.
Это я знаю, что он формат поменяет. Но именно этого я и боюсь. =) Поэтому и спросил, у кого опыт есть работы с юникод исходниками.
1>Насчет перевода строк в рантайме в юникод вообще не понял. Какой смысл расширять кодовую таблицу если оригинальные строки закодированы в меньшей?
А я не понял про расширение кодовой таблицы. Задача: сделать юникодную константу. Можно забить char-ную константу и номер кодовой страницы, и перевести в рантайме в юникод. Но этот способ не нравится, так как лишняя работа в рантайме.
SG>>На вскидку я вижу такие минусы юникодных исходников — не все редакторы поймут, а также скорее всего не все программы, которые смотрят File Difference это поймут (опять же не проверял). 1>Это какие редакторы не поймут? Даже notepad с unicod-ом дружит. И с File Defference проблем нет. Особенно для utf-8.
А вот такая проблема. По умолчанию новый файл делается в ANSI. Потом кто-то вставляет китайский иерголиф, файл перекодируется. После этого File Difference начинает глючить (по-моему, я даже видел такое).
1>Вобщем никаких проблем с UTF-8 нет. Все работает.
Это здорово! Но правильнее наверное сразу все файлы в проекте делать в UTF-8.
Здравствуйте, Sir-G, Вы писали:
SG>>>Собственно проблему я в основном вижу в описании литералов вида L"русский текст" при ANSI исходнике 1>>-отлично перекодируються в юникод, вы высасали из пальца несуществующую проблему. SG>Эх, если бы... =) Перекодировка происходит по системной кодовой странице, которая на другой машине может быть английская. Я уж не говорю, что таким способом литералы на нескольких языках (например, еще французском) не написать в принципе.
unicode отлично работает. У меня английская винда и студия — и ниче так, работает. При нескольких языках сама в юникод перекодирует и все.
1>>WTF? Усе работает и так. Если пользуетесь VS — попробуйте вставить к примеру китайский иероглиф — сама предложит перекодировать файл в unicode. SG>Это я знаю, что он формат поменяет. Но именно этого я и боюсь. =) Поэтому и спросил, у кого опыт есть работы с юникод исходниками.
студия с юникодными исходниками великолепно работает толи с 6 толи с 7 версии
касаемо unix-ов и utf8 — даже если компилировать доисторическим gcc без подержки unicode — кодировка сохраниться и система будет нормально с ней работать.
1>>Насчет перевода строк в рантайме в юникод вообще не понял. Какой смысл расширять кодовую таблицу если оригинальные строки закодированы в меньшей? SG>А я не понял про расширение кодовой таблицы. Задача: сделать юникодную константу. Можно забить char-ную константу и номер кодовой страницы, и перевести в рантайме в юникод. Но этот способ не нравится, так как лишняя работа в рантайме.
можно просто задать юникодовую константу
SG>>>На вскидку я вижу такие минусы юникодных исходников — не все редакторы поймут, а также скорее всего не все программы, которые смотрят File Difference это поймут (опять же не проверял). 1>>Это какие редакторы не поймут? Даже notepad с unicod-ом дружит. И с File Defference проблем нет. Особенно для utf-8. SG>А вот такая проблема. По умолчанию новый файл делается в ANSI. Потом кто-то вставляет китайский иерголиф, файл перекодируется. После этого File Difference начинает глючить (по-моему, я даже видел такое).
File Difference — Какую программы вы имеете в виду? Большинство отлично работает с utf-8
1>>Вобщем никаких проблем с UTF-8 нет. Все работает. SG>Это здорово! Но правильнее наверное сразу все файлы в проекте делать в UTF-8.
Мне неизвестно о возможности настраивать кодировку для вновь создаваемых файлов
В общем, если сумировать:
Можно спокойно перекодировать исходники в utf8 — никаких косяков не будет ни в Windows & VS, не в Linux/xBSD & gcc. Единственный всплывающий при этом аспект в том что в win строки должны быть wchat_t & L"", а в lin char & "". Со всеми последствиями.
Здравствуйте, kpcb, Вы писали:
K>Здравствуйте, Sir-G, Вы писали:
SG>>Опрос: кто-нибудь реально использует юникодные исходники?
K>Я использую. Т.к. есть исходник в ANSI открыть в XCode-e то вместо русских комментариев будет абракадабра
В Xcode в свойствах файла (пункт Get Info в контекстном меню) можно выбрать кодировку из раскрывающегося списка
(по умолчанию стоит UTF-8).
В случае ANSI 1251 нужно выбирать кодировку Cyrillic (Windows).
При изменении кодировки файл Xcode спросит что нужно сделать с помощью диалога с двумя кнопками —
Reinterpret (переинтерпретировать то, что есть, т.е. изменить отображение файла в Xcode) и
Convert (конвертировать, т.е. изменить сам файл на диске).
Соответственно, нужно выбрать Reinterpret.
Здравствуйте, 11molniev, Вы писали:
1>можно просто задать юникодовую константу
Можно, если исходник юникодный. =) А иначе не было бы смысла делать такие исходники, по-моему.
SG>>А вот такая проблема. По умолчанию новый файл делается в ANSI. Потом кто-то вставляет китайский иерголиф, файл перекодируется. После этого File Difference начинает глючить (по-моему, я даже видел такое). 1>File Difference — Какую программы вы имеете в виду? Большинство отлично работает с utf-8
Ну я говорю обобщенно говорю. Я могу проверить конкретную программу, но у другого человека программа-сравнивалка может
оказаться не такой умной. Долгое время я работал с Vusial SourceSafe, и вот этот глюк как раз кажется там и был. Теперь пользуюсь дефолтовой сравнивалкой в Tortoise SVN, но знаю, что многие подключают всякие другие программы.
1>В общем, если сумировать: 1>Можно спокойно перекодировать исходники в utf8 — никаких косяков не будет ни в Windows & VS, не в Linux/xBSD & gcc. Единственный всплывающий при этом аспект в том что в win строки должны быть wchat_t & L"", а в lin char & "". Со всеми последствиями.
Тут наверно соглашусь, что все средства уже сами умные стали, чтобы работать с utf-8. Но есть какой-то консерватизм и инерция в переходе на него.