LINUX.ORG.RU

Напечатать UTF-8 символ в аргумент командной строки


0

1

Для одной программы мне надо в качестве аргумента передать UTF-8 символ. Что-то вроде такого:

./program \x0301
Но хочется, чтобы программа (на Си) не занималась конвертацией обозначения в символ, а генерировать его код где-то вне программы.
Можно ли сделать что-то с помощью echo? Что-то типа такого:
$ echo -e "\x21"
!
Или придется тянуть Python?
$ python -c 'print u"\u0301"'
$ python -c 'print unichr(0x0301)'

★★★★★

Ответ на: комментарий от anonymous

> Это винда до сих пор с динозаврами пребывает.

Это у меня - наследие ZX Spectrum (Дельта-С) и IBM 286.
Без кодировок под ними можно было только играть в игры и пытаться рисовать пиксели в графическом редакторе.

Такие нехорошие слова как «кодировка», «кодовые страницы» вообще надо забыть


Надо же потом будет ребенку преподавать дома информатику (когда образование платным станет). ;)
Историю ЭВМ и т.п.

pacify ★★★★★
() автор топика
Ответ на: комментарий от x3al

> Его хватает на весь character set.

Он имеет ввиду еще один инопланетянский язык «в вакууме». Если изобретут.

pacify ★★★★★
() автор топика
Ответ на: комментарий от x3al

Глобализация приводит не ко появлению новых письменностей, а к их сокращению и глобальной унификации всего и вся, к сожалению. Так что юникоду вряд ли грозит разрастание. Например, среди китайцев есть несознательные товарищи, которые давно хотят отказаться от иероглифов и остаться только с их алфавитом пиньинь на основе латиницы, но пока китайские традиции всё-таки сильнее, что радует.

anonymous
()
Ответ на: комментарий от anonymous

>среди китайцев есть несознательные товарищи, которые давно хотят отказаться от иероглифов и остаться только с их алфавитом пиньинь на основе латиницы
Это мандаринцы. Они столкнутся с тонной внезапно появившихся омонимов и усложнившимся языком, но в общем могут это сделать (вьетнамцы сделали подобное).
А с остальным китаем что делать? :3

x3al ★★★★★
()
Ответ на: комментарий от x3al

character set сам по себе является fixed-length кодировкой (как минимум в понимании юникода).

UTF-16 (16-bit Unicode Transformation Format) is a character encoding for Unicode capable of encoding 1,112,064[1] numbers (called code points) in the Unicode code space from 0 to 0x10FFFF. It produces a variable-length result of either one or two 16-bit code units per code point.

The older UCS-2 (2-byte Universal Character Set) is a similar character encoding that was superseded by UTF-16 in version 2.0 of the Unicode standard in July 1996. It produces a fixed-length format by simply using the code point as the 16-bit code unit and produces exactly the same result as UTF-16 for 63,488 code points in the range 0-0xFFFF, including all characters that had been assigned a value at that time.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Именно. А UTF-32 определён исключительно на UCS-4 и fixed-length за счёт этого.

UTF-32 encoding form: The Unicode encoding form which assigns each Unicode scalar value to a single unsigned 32-bit code unit with the same numeric value as the Unicode scalar value. • In UTF-32, the code point sequence <004D, 0430, 4E8C, 10302> is represented as <0000004D 00000430 00004E8C 00010302>. • Because surrogate code points are not included in the set of Unicode scalar values, UTF-32 code units in the range 0000D800₁₆..0000DFFF₁₆ are ill-formed. • Any UTF-32 code unit greater than 0010FFFF₁₆ is ill-formed.

© спецификация unicode 4.0, часть 3.9.

x3al ★★★★★
()
Ответ на: комментарий от buddhist

Что плохо-то?

Достаточно всё логично. Есть набор символов юникода, представленных номерами-числами. Это основа.

Далее стоит задача отобразить множество этих номеров юникода на множество других номеров, что было сделано разными способами в виде UTF8, UFT16, UTF32. Как угодно ещё можно придумать.

anonymous
()
Ответ на: комментарий от pacify

Ну так это простая разметка. Какие тут проблемы от использования юникода? Разве что не надо подбирать кодировку документа, да, ради чего собственно на него и переходят.

tensai_cirno ★★★★★
()
Ответ на: комментарий от anonymous

Ну если, допустим, появится набор символов UCS-6 или UCS-8, UTF-32 будет переменной длины?

buddhist ★★★★★
()
Ответ на: комментарий от tensai_cirno

> Ну так это простая разметка. Какие тут проблемы от использования юникода?

В HIP есть символы, которых нет с современном русском алфавите.
Эти символы кодируются с помощью комбинаций русских букв и других знаков.
Это я и понимаю под кодировкой. И мне такой способ определения новых сущностей нравится.
Для них не приходится изобретать новые редакторы - все делаешь,
как будто работаешь с LaTeX.
Проблем с юникодом в данном случае нет - он просто не нужен. :)
А вот изобретение цепочек байтов под эти же символы (которые обозвали UTF-8) - мне очень не нравится. Приходится переписывать программы «с нуля», хотя они могли бы быть значительно проще в случае красивых комбинаций символов, уже имеющихся в ASCII/CP1251/CP866/KOI8-R.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Это не кодировка, это как раз костыль в мире однобайтовых кодировок.

Опять же, никто не заставляет переписывать софт. Проблема в том что документ можно открыть и в CP1251, и в CP866, и в KOI8-R. Это ужасно, и есть единая кодировка, которая содержит абсолютно всё. Старославянскому (или как он там) тоже досталось место, как будто это что-то плохое.

А время для нового софта может и настанет когда-нибудь.

tensai_cirno ★★★★★
()
Ответ на: комментарий от tensai_cirno

> А время для нового софта может и настанет когда-нибудь.

Что Вы понимаете под «новым» софтом? Который использует только Unicode?

Старославянскому (или как он там) тоже досталось место, как будто это что-то плохое.


Церковнославянскому (или «кириллице»). Есть в Unicode вроде и «глаголица» (которой писали наши предки до 900-х годов).

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Это надо специально постараться, чтобы найти искусственные проблемы с кодировками в линуксе. Он же весь уже на юникоде давно, все редакторы gedit, kwrite, консоли, офисы и т.д. Куча раскладок клавиатуры тоже имеется. Пиши на всех языках одновременно и радуйся. Ан нет, вот вы проблемы себе создаёте какие-то выдуманные.

anonymous
()
Ответ на: комментарий от pacify

Товарищ, вам сюда — http://unicode.org/. Читать до полного просветления. Особенно про нормализации, композицию и декомпозицию, про совместимости с старьём и т.д. Про различия между юникодом и его представлениями в виде последовательности байт. Чтобы больше не писали глупости.

anonymous
()
Ответ на: комментарий от anonymous

> Это надо специально постараться, чтобы найти искусственные проблемы с кодировками в линуксе.

Однако, такая проблема сразу вылезла - см. исходный вопрос о печати символа UTF-8 посредством /bin/echo.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Хорошо, в какой системе с кодовыми страницами нет проблем с выводом произвольного юникодного символа?

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

> Хорошо, в какой системе с кодовыми страницами нет проблем с выводом произвольного юникодного символа?

Там, где Unicode вообще не нужен. Или где он используется, например,
внутри программы - для передачи кода библиотеке freetype или Cairo.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.