LINUX.ORG.RU

Преобразование символа из десятичного кода в UTF-8

 , ,


2

2

Понадобилось смотреть какой символ соответствует коду. Написал такое:

~$ alias utf="dc -e '2 6^sb[PAPq]sq?dlb2*>q[dlb%lb2*+rlb/d2 Az-^<t]dstxlb4*2 8z3--^-+[Pz0<p]dspxAP'<<<"
~$ utf 1067
Ы
~$ utf 33
!
~$ utf 126
~
~$ utf 128050
🐲
~$ utf 51022
읎

Если вдруг нужен 16-ричный код, то можно так:

~$ alias utfhex="dc -e '16i2 6^sb[PAPq]sq?dlb2*>q[dlb%lb2*+rlb/d2 Az-^<t]dstxlb4*2 8z3--^-+[Pz0<p]dspxAP'<<<"
~$ utfhex 21
!
~$ utfhex AB
«
~$ utfhex 6587
文
~$ utfhex 42B
Ы

Но проще так:

~$ echo -e '\u042B'
Ы

★★★★★

ctrl-shift удерживать
u042B (цифры на нумпаде)
отпустить ctrl-shift
Ы

af5 ★★★★★ ()
Последнее исправление: af5 (всего исправлений: 1)

Где гарантии, что оно не делает rm -rf?

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

Где гарантии, что оно не делает rm -rf?

Если бы там был rm -rf стал бы я это у себя запускать?

И что тебе мешает прочитать код и понять как он работает? dc очень простой язык и полное описание занимает пару страниц, и никто не запрещает прочитать man.

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
alias utf="dc -e '2 6^sb[PAPq]sq?dlb2*>q[dlb%lb2*+rlb/d2 Az-^<t]dstxlb4*2 8z3--^-+[Pz0<p]dspxAP'<<<"

/me почувствовал себя ламером со своим

$ perl -e 'print "\x{6587}"'
文

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

u042B (цифры на нумпаде)

Можно и не на нумпаде. Хм, да, работает. Но тут опять же код 16-ричный

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

Можно и не на нумпаде

если не на нумпаде то в некоторых терминалах лезут скобки и прочее вместо цифр.

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

если не на нумпаде то в некоторых терминалах лезут скобки и прочее вместо цифр.

В терминале это вообще не работает (проверял в xterm). И между прочим на нумпаде нету u и a-f

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

У меня вроде срабатывало кое-где при невыясненных обстоятельствах.

И между прочим на нумпаде нету u и a-f

засада...

af5 ★★★★★ ()
Последнее исправление: af5 (всего исправлений: 1)
Ответ на: комментарий от Xenius

А в чем непосредственно достижение? Вон есть пыхтон3, а в нем есть chr().

Если задача сделать страшненько с первого взгляда, то ты победил.

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

В терминале это вообще не работает (проверял в xterm)

с нумпадными цифрами работает нормально в стандартном убунтовом терминале

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

В xterm тоже работает с нумпадными цифрами

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

В xterm тоже работает с нумпадными цифрами

Что в точности нужно нажать-то? [a-fu] же нету на нумпаде.

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

ctrl-shift удерживать
u042B (цифры на нумпаде)
отпустить ctrl-shift
Ы
цифры - на нумпаде, буквы - ну уж где найдешь, лишь бы раскладка англ.

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

У меня *$^@^B получается. Может у тебя какой-нибудь input method включен.

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

А что за ОС? У меня стандартная убунта десктоп 16.04

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

Или может у тебя переключение раскладки на ctrl-shift (у меня alt-shift)

af5 ★★★★★ ()
Последнее исправление: af5 (всего исправлений: 1)
Ответ на: комментарий от Xenius

У тебя код 16-ричный, а у меня десятичный.

Да, недописал. Надо так:

perl -e 'print "\x{'`printf '%x' 51022`'}"'
devzero ()
Ответ на: комментарий от Xenius

$@

Такое ощущение что ты не на нумпаде набираешь а на тех которые сверху, откуда на нумпаде $@ вместо 42

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

perl -e 'print «\x{'`printf '%x' 51022`'}»'

Как-то сложно и запутанно и нафига там вообще перл не ясно.

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

Как-то сложно и запутанно

«dc -e '2 6^sb[PAPq]sq?dlb2*>q[dlb%lb2*+rlb/d2 Az-^<t]dstxlb4*2 8z3--^-+[Pz0<p]dspxAP'<<<»

/0 :)

нафига там вообще перл не ясно.

Первое, что в голову пришло.

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

Но ведь можно сделать полностью через builtin bash.

$ bh() { echo -e "\u`printf %x $1`"; }
$ bh 51022
읎

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

А в KOI8 так же можно?

244 217 32 201 205 197 197 219 216 32 215 215 201 196 213 32 222 212 207 45 212 207 32 215 210 207 196 197 32 220 212 207 202 32 203 207 205 193 206 196 217 63

fkoi() { for x in `printf '%x ' $*`; do echo -en "\x$x"; done | iconv -f koi8; echo; }
Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от utf8nowhere

Зачем тогда dc?

Затем, что на dc полноценная сериализация юникода с формированием бинарных кодов, а на баше только обращение к существующим функциям.

Xenius ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)