Автор Тема: iconv не работи така, както ми се иска :) . Липсва ли му нещо ... ?  (Прочетена 2424 пъти)

laskov

  • Напреднали
  • *****
  • Публикации: 2906
    • Профил
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?
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

4096bits

  • Напреднали
  • *****
  • Публикации: 3621
    • Профил
Прилича на липса на шрифтове
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Naka

  • Напреднали
  • *****
  • Публикации: 2821
    • Профил
Я виж това
https://www.php.net/manual/en/function.iconv.php

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

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

bg_BG в сентос май още сочи към 1251, докато в дебиан е утф8.
За сигурност трябва да го пишеш цялото bg_BG.UTF8
« Последна редакция: Feb 09, 2020, 23:20 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

remotexx

  • Напреднали
  • *****
  • Публикации: 1078
    • Профил
А какъв е системния локал, т.е. този който ползва echo? А има ли ги инсталирани другите локали които задаваш на Шела .. Там DE, BG в смисъл не УТФ-ските, защото доколкото разбирам искаш да конвертираш до 8 битова кодова таблица?

За да разбереш дали е в iconv проблема най добре пробвай първо с файл ... Там няма значение вече имаш ли го локала или не, от Гугъл гледаш cp1251  и праскаш направо кодовете 16-тично...мисля 255=я /или Я/
И после тоя файл го прекарваш през конвертора и гледаш дали работи правилно
Като освен входа и изхода му да е на файл. Ако така работи, значи шела нещо омотава кодировките или пък просто липсват на системно ниво тия 8 битовите
« Последна редакция: Feb 10, 2020, 06:39 от remotexx »
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 2821
    • Профил
Явно липсват кодови таблици в 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



« Последна редакция: Feb 10, 2020, 12:43 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

laskov

  • Напреднали
  • *****
  • Публикации: 2906
    • Профил
Naka, благодаря много!  [_]3
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

makeme

  • Напреднали
  • *****
  • Публикации: 884
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Ако все пак ти трябва на баш, можеш да пробваш и 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. :


Цитат на: 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 , преди време на нещо друго и ся колегата като спомена и това...
« Последна редакция: Feb 10, 2020, 16:41 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

remotexx

  • Напреднали
  • *****
  • Публикации: 1078
    • Профил
При мен пък всичко си работи и с 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
Активен

makeme

  • Напреднали
  • *****
  • Публикации: 884
  • Distribution: Many
  • Window Manager: KDE
    • Профил
При мен пък всичко си работи и с 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
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

laskov

  • Напреднали
  • *****
  • Публикации: 2906
    • Профил
$ echo "аожяаожеи" | LANG=bg_BG /usr/bin/iconv -f UTF-8 -t ASCII//TRANSLIT
?????????
$ cat /etc/slackware-version
Slackware 14.2+
т.е. 14.2-current
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Проблем с iconv
Настройка на програми
borovaka 3 876 Последна публикация Feb 05, 2011, 15:40
от borovaka