Проблем с кирилицата

13 отговора 0 прегледа
#1

Проблем с кирилицата

Имам проблем с Linux.
API функцията му от libc towupper не Upcase-ва правилно, буквата 'ч' остава малка, а буквата 'я' става на '?'. Някаква идея ? Има и проблем с Locase. Не locase-ва буквите 'Я' и 'Ч'.

Някой да се е сблъсквал с това ?

Отговор
в отговор на Dark_Dirk #2

Re: Проблем с кирилицата

Какъв ти е енкодинга?

Отговор
в отговор на Dark_Dirk #3

Re: Проблем с кирилицата

Е няма ли някой компетентен да отговори ? Никой ли не програмира под Linux тука ????

Отговор
в отговор на Dark Dirk #4

Re: Проблем с кирилицата

Какво общо има програмирането под Линукс с използването на кирилица или отговарянето на тъпи въпроси?

Отговор
в отговор на Dark Dirk #5

Re: Проблем с кирилицата

А ми на теб са ти отговорили.
Не знам какво повече очакваш.

Bеer? Mоre?
Плацебото
Отговор
в отговор на Dark Dirk #6

Само да допълня

kwrite - няма никакъв проблем да прави upper case и lower case.

Bеer? Mоre?
Плацебото
Отговор
в отговор на bira_more #7

Re: Проблем с кирилицата

И къде го видя тоя отговор ?????


Явно никой не се е сблъсквал с това. Ама поне да не задават тъпи въпроси от сорта "Какъв ти е енкодинга" като вообще не разбират за какво става въпрос.

п.п.
Моля модератора да изтрие темата. Явно е безполезна.

Отговор
в отговор на Dark Dirk #8

Re: Проблем с кирилицата

Въпросът за енкодинга си е съвсем на място.

Отговор
в отговор на Dark Dirk #9

Re: Проблем с кирилицата

Ако не си чувал, има много енкодинги, някои от тях дори поддържат кирилица. Libc не може да чете мисли и да ти прави toupper във всички възможни енкодинги едновременно.

Ако беше казал какъв е енкодинга, който използваш, можех да се прежаля и да погледна в сорса на libc дали има някакъв проблем за него. Но понеже не мога да чета мисли, ще те оставя да си погледнеш сам.

Редактирано от | на

Отговор
в отговор на | #10

Re: Проблем с кирилицата

Извинявам се официално на всички. Подал съм грешна информация.

Да обясня по-конкретно. Ползвам Kylix. В него вътрешно се ползва towupper т.е. енкодинга е 4 байтов. Та затова се чудех защо ме питаш за енкодинга след като има само един възможен в този момент ама съм посочил грешната функция и е станало неразбирателство.

Та в сорса на Kylix има следното:

Temp[ I ] := WideChar(towupper(UCS4Char(Temp[ I ])));

И има проблем с описаните букви. Проблема може да е както в Linux, така и в Kylix.
Аз например се чудя как може да cast-нат един WideChar(в Delphi той е 2 байта към UCS4Char - 4 байта), но сигурно ако погледна диасемблирания сорс на ассемблер (в CPU view) ще видя, че той го прави през временна променлива.

Един колега го беше решил този проблем преди 2-3 години на една Linux машина, но съм загубил контакт с него и незнам какво точно е пипнал. Та проблема 100% има решение. Въпроса е какво е то????

Отговор
в отговор на Dark Dirk #11

Re: Проблем с кирилицата

Е поне има една полза надявам се - не трябва да предполагаш - както казва старшината на Дик Марчинко - като предполагаш правиш и себе си и отбора на гъз :)

Киликс не съм ползвал а и не знаех че има и 4 байтов енкодинг. Чудя се дали не е чисто Борландска измислица.

Както и да е - мога да ти дам няколко идеи:
На времето съм ровил из хедърите на CBuilder - и като се налагаше ги променях както ми е необходимо на мен.
Киликса не е много популярен - щом аз който съм ползвал Борландски среди поне 10 госини, накрая се предадох - мисля че е голяма издънка. А и Борланд никога не са били добри като става въпрос за системни извиквания. Огледай функциите - в краен случай направи си наследник на класа и оувъррайт на споменатата функция. По бързо ще бъде. Или си направи собствена функция.
И все пак имай предвид че не се знае какво и как се ползва - в смисъл може енкодинга на хост системата да влияе на функциите на Киликса.

Bеer? Mоre?
Плацебото
Отговор
в отговор на Dark Dirk #12

Re: Проблем с кирилицата

Penchev ne moje li da pomogne;)

Отговор
в отговор на Dark Dirk #13

Re: Проблем с кирилицата

Стандартния towupper на libc си работи добре:


#include <stdio.h>
#include <wctype.h>
#include <locale.h>

int
main()
{
setlocale(LC_ALL, "");
printf("ch %x Ch %x\n", 0x447, towupper(0x447));
printf("ia %x Ia %x\n", 0x44F, towupper(0x44F));
return 0;
}


ch 447 Ch 427
ia 44f Ia 42f

Отговор
в отговор на bira_more #14

Re: Проблем с кирилицата

> Киликс не съм ползвал а и не знаех че има и 4 байтов енкодинг. Чудя се дали
> не е чисто Борландска измислица.

Не е. Новите версии на Unicode вече не се събират в 16 бита, затова има UCS-4/UTF-32 :)

Отговор