Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: laskov в Feb 09, 2020, 21:46



Титла: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: laskov в Feb 09, 2020, 21:46
echo "Möller" | LANG=de_DE /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
в Centos 7 връща
Moeller
, а в xUbuntu връща
M?ller

Това, което ми е по-важно, е
echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
да върне
aogyaaogei
, но то връща
?????????
Дори и с Lang=ru_RU е така и в Centos, и в xUbuntu.

Как да го накарам да работи?
Виждал съм такава функционалност при писането в различни сайтове, значи някак е направено. Има ли заместител или не съм инсталирал нещо допълнително към iconv?


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: 4096bits в Feb 09, 2020, 22:28
Прилича на липса на шрифтове


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: Naka в Feb 09, 2020, 23:06
Я виж това
https://www.php.net/manual/en/function.iconv.php

Въпреки че е за пхп много хубаво е написано за използването на системното  iconv
Преди да пускаш iconv пробвай да сетнеш правилното LC_CTYPE че iconv e локале зависимо.

Обаче ако случайно си решил да правиш транслитерация от бг към латиница по добре си напиши собствена функция.  ::)

bg_BG в сентос май още сочи към 1251, докато в дебиан е утф8.
За сигурност трябва да го пишеш цялото bg_BG.UTF8


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: remotexx в Feb 10, 2020, 06:32
А какъв е системния локал, т.е. този който ползва echo? А има ли ги инсталирани другите локали които задаваш на Шела .. Там DE, BG в смисъл не УТФ-ските, защото доколкото разбирам искаш да конвертираш до 8 битова кодова таблица?

За да разбереш дали е в iconv проблема най добре пробвай първо с файл ... Там няма значение вече имаш ли го локала или не, от Гугъл гледаш cp1251  и праскаш направо кодовете 16-тично...мисля 255=я /или Я/
И после тоя файл го прекарваш през конвертора и гледаш дали работи правилно
Като освен входа и изхода му да е на файл. Ако така работи, значи шела нещо омотава кодировките или пък просто липсват на системно ниво тия 8 битовите


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: Naka в Feb 10, 2020, 12:15
Явно липсват кодови таблици в iconv. За да прави TRANSLIT той трябва да знае за всички езици!!! (за всички code-pages!!!) в цялото уникоде как се транслитерират към ASCII. явно няма такава транслитерационна code-page за кирилицата и затова дава питанки.

iconv e в много основен пакет glibc !!!
rpm -qil glibc-common

пробвах го в шела в моя центос7 и там дава питанки със всякакви LANG.
пробвах го и в php и там дава питнаки.

Код:
php > echo 'TRANSLIT : '.iconv("UTF-8", "ASCII//TRANSLIT", "аожяаожеи").PHP_EOL;
TRANSLIT : ?????????
php >
php > echo 'TRANSLIT : '.iconv("UTF-8", "ISO-8859-1//TRANSLIT", "аожяаожеи").PHP_EOL;
TRANSLIT : ?????????
php >

Въобще не те съветвам обаче да си ъпгрейдваш glibc-common че ще повлече цялата система, а и резултата няма да е ясен.

Цитат
Виждал съм такава функционалност при писането в различни сайтове, значи някак е направено.
напиши си собствена php функция за транслитерация.
https://www.linux-bg.org/forum/index.php?topic=40223.msg219704#msg219704





Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: laskov в Feb 10, 2020, 13:00
Naka, благодаря много!  [_]3


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: makeme в Feb 10, 2020, 13:16
Ако все пак ти трябва на баш, можеш да пробваш и konwert:
Код:
$ echo "аожяаожеи" | konwert utf8-ascii
aozhyaaozhei

Явно липсват кодови таблици в iconv. За да прави TRANSLIT той трябва да знае за всички езици!!! (за всички code-pages!!!) в цялото уникоде как се транслитерират към ASCII. явно няма такава транслитерационна code-page за кирилицата и затова дава питанки.

iconv e в много основен пакет glibc !!!
rpm -qil glibc-common

пробвах го в шела в моя центос7 и там дава питанки със всякакви LANG.
пробвах го и в php и там дава питнаки.

ПП: Напълно си прав. Трябва ти 2019-08-01: glibc 2.30 released.  ($2):


Цитат на: glibc 2.30
The following bugs are resolved with this release:

  [2872] locale: Transliteration Cyrillic -> ASCII fails

На 18.04 съм с :
Код:
$ ldd --version
ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
$ echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
?????????

На манджаро виртуалката като пробвах (там са доста по-нови пакетите):

Код:
$ ldd --version
ldd (GNU libc) 2.30
$ echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
aozhyaaozhei

ПП2: Накрая и аз ще мина на маджата, че ми писна от тия дърти пакети при ubuntu-to. Ония ден се дразнех на upower , преди време на нещо друго и ся колегата като спомена и това...


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: remotexx в Feb 11, 2020, 03:32
При мен пък всичко си работи и с 2.29 (Федора 30) въпреки че е оправено едва в 2.30
Естествено конзолата ги омазва някой кодировки но със файлове всичко е наред
напр.
Код
GeSHi (Bash):
  1. iconv -f CP1251 -t UTF8 -o zzUtf8.txt iconv1251.txt
  2. iconv -f UTF8 -t CP1251 -o zz1251.txt iconvUtf8.txt


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: makeme в Feb 11, 2020, 10:25
При мен пък всичко си работи и с 2.29 (Федора 30) въпреки че е оправено едва в 2.30
Естествено конзолата ги омазва някой кодировки но със файлове всичко е наред
напр.
Код
GeSHi (Bash):
  1. iconv -f CP1251 -t UTF8 -o zzUtf8.txt iconv1251.txt
  2. iconv -f UTF8 -t CP1251 -o zz1251.txt iconvUtf8.txt
Става дума за ASCII. Тея въпросителни не са като ония въпросителни :) Пробвай това дето размятаме:

$ echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT


Титла: Re: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?
Публикувано от: laskov в Mar 17, 2020, 09:52
$ echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
?????????
$ cat /etc/slackware-version
Slackware 14.2+
т.е. 14.2-current