Portál AbcLinuxu, 9. května 2025 00:26
echo "Něco s háčky a čárkami" >/tmp/outpak se do souboru /tmp/out onen text skutečně zapíše v UTF-8, ale špatně, protože, jak poznamenal Yeti, se text interpretuje jako by byl v Latin1. Když v Bashi např. napíšu pár diakritických znaků v příkazové řádce a potom je umažu, pak se mi umaže i část promptu, čili Bash interpretuje každý znak jako byte. Shell sh pracuje se znaky korektně, ale když je zapíšu tak je výsledek stejně špatný. Moje locales teď jsou:
export LANG=cs_CZ.utf8 export LC_ALL=cs_CZ.utf8a ve svém .profile volám
unicode_start /usr/share/kbd/consolefonts/lat2-14.psfu.gzAlespoň potřebuju vědět, kde hledat chybu. Nainstaloval jsem si nejnovější Bash, Readline a SLang, ale nic se nezlepšilo. Shellem to nebude. Já nevím, je snad chyba už při vstupu z klávesnice? Nebo snad volám špatně unicode_start? Nejhorší na tom je, že neexistuje žádná alternativa jako ISO8859-2, dávno jsem odkázaný na unicode. Díky
#!/bin/bash # Enables Unicode processing in the current console. # # 1. The input side: the keyboard driver. # Set the keyboard driver in Unicode mode. (Default is ASCII mode.) # This really does nothing with the way normal keys are handled in # the kernel. All it does is: # - It is necessary for `dumpkeys' in order to not drop U+XXXX # entries from the keymaps. # - It is necessary for `loadkeys' in order to avoid warnings. # - Unicode characters typed as Alt-x1 ... Alt-xn (where x1,...,xn # are digits on the numeric keypad) will be emitted in UTF-8. kbd_mode -u # Change the keyboard mapping in such a way that the non-ASCII keys # produce UTF-8 encoded multibyte sequences, instead of single bytes # >= 0x80 in a legacy 8-bit encoding. dumpkeys | loadkeys --unicode # 2. The output side: the console screen. # Tell the console output driver that the bytes arriving are UTF-8 # encoded multibyte sequences. if test -t 1 -a -t 2 ; then echo -n -e '\033%G' fi # Tell the graphics card how to display Unicode characters not # contained in the IBM 437 character set (on PCs). The font should # have a Unicode map attached, or explicitly specified, e.g., # by giving `def.uni' as a second argument. DEFAULT_UNICODE_FONT=latarcyrheb-sun16 # Also drdos8x16 is a good candidate. case $# in 2) setfont $1 -u $2 ;; 1) setfont $1 ;; 0) setfont $DEFAULT_UNICODE_FONT ;; *) echo "usage: unicode_start [font [unicode map]]" ;; esacPS. Jinak vím že nějakej bash taky blbnul s unicode (z RH9 ? Už nevím) musel se použít upravenej. (mazal znaky špatně)
No tak nám podrobně popište co přesně děláte křištálové koule fakt nemáme.
Já to popsal jak jsem mohl, víc informací sám nemám, kdybych měl, nemusel bych se ptát.
Zkoušel jsem všechno možné s unicode_start, loadkeys a kbd_mode, ale marně. To že Bash maže znaky špatně není to nejhorší, ale veškerý vstup z klávesnice je právě podle všeho převeden do Latin1. Ale díky za nápad, rozeberu ten skript unicode_start.
a ve svém .profile volám unicode_start /usr/share/kbd/consolefonts/lat2-14.psfu.gzTo je blbě měl by jste volat přepnutí do unicode hned po startu pro všechny terminály, čili někde v rc.local nebo podobně ještě před loginem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.