Проблем с кирилицата
13 отговора
0 прегледа
Проблем с кирилицата
Имам проблем с Linux.
API функцията му от libc towupper не Upcase-ва правилно, буквата 'ч' остава малка, а буквата 'я' става на '?'. Някаква идея ? Има и проблем с Locase. Не locase-ва буквите 'Я' и 'Ч'.
Някой да се е сблъсквал с това ?
API функцията му от libc towupper не Upcase-ва правилно, буквата 'ч' остава малка, а буквата 'я' става на '?'. Някаква идея ? Има и проблем с Locase. Не locase-ва буквите 'Я' и 'Ч'.
Някой да се е сблъсквал с това ?
Re: Проблем с кирилицата
Е няма ли някой компетентен да отговори ? Никой ли не програмира под Linux тука ????
Re: Проблем с кирилицата
Какво общо има програмирането под Линукс с използването на кирилица или отговарянето на тъпи въпроси?
Re: Проблем с кирилицата
А ми на теб са ти отговорили.
Не знам какво повече очакваш.
Bеer? Mоre?
Плацебото
Не знам какво повече очакваш.
Bеer? Mоre?
Плацебото
Само да допълня
kwrite - няма никакъв проблем да прави upper case и lower case.
Bеer? Mоre?
Плацебото
Bеer? Mоre?
Плацебото
Re: Проблем с кирилицата
И къде го видя тоя отговор ?????
Явно никой не се е сблъсквал с това. Ама поне да не задават тъпи въпроси от сорта "Какъв ти е енкодинга" като вообще не разбират за какво става въпрос.
п.п.
Моля модератора да изтрие темата. Явно е безполезна.
Явно никой не се е сблъсквал с това. Ама поне да не задават тъпи въпроси от сорта "Какъв ти е енкодинга" като вообще не разбират за какво става въпрос.
п.п.
Моля модератора да изтрие темата. Явно е безполезна.
Re: Проблем с кирилицата
Ако не си чувал, има много енкодинги, някои от тях дори поддържат кирилица. Libc не може да чете мисли и да ти прави toupper във всички възможни енкодинги едновременно.
Ако беше казал какъв е енкодинга, който използваш, можех да се прежаля и да погледна в сорса на libc дали има някакъв проблем за него. Но понеже не мога да чета мисли, ще те оставя да си погледнеш сам.
Ако беше казал какъв е енкодинга, който използваш, можех да се прежаля и да погледна в сорса на libc дали има някакъв проблем за него. Но понеже не мога да чета мисли, ще те оставя да си погледнеш сам.
Редактирано от | на
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% има решение. Въпроса е какво е то????
Да обясня по-конкретно. Ползвам 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% има решение. Въпроса е какво е то????
Re: Проблем с кирилицата
Е поне има една полза надявам се - не трябва да предполагаш - както казва старшината на Дик Марчинко - като предполагаш правиш и себе си и отбора на гъз :)
Киликс не съм ползвал а и не знаех че има и 4 байтов енкодинг. Чудя се дали не е чисто Борландска измислица.
Както и да е - мога да ти дам няколко идеи:
На времето съм ровил из хедърите на CBuilder - и като се налагаше ги променях както ми е необходимо на мен.
Киликса не е много популярен - щом аз който съм ползвал Борландски среди поне 10 госини, накрая се предадох - мисля че е голяма издънка. А и Борланд никога не са били добри като става въпрос за системни извиквания. Огледай функциите - в краен случай направи си наследник на класа и оувъррайт на споменатата функция. По бързо ще бъде. Или си направи собствена функция.
И все пак имай предвид че не се знае какво и как се ползва - в смисъл може енкодинга на хост системата да влияе на функциите на Киликса.
Bеer? Mоre?
Плацебото
Киликс не съм ползвал а и не знаех че има и 4 байтов енкодинг. Чудя се дали не е чисто Борландска измислица.
Както и да е - мога да ти дам няколко идеи:
На времето съм ровил из хедърите на CBuilder - и като се налагаше ги променях както ми е необходимо на мен.
Киликса не е много популярен - щом аз който съм ползвал Борландски среди поне 10 госини, накрая се предадох - мисля че е голяма издънка. А и Борланд никога не са били добри като става въпрос за системни извиквания. Огледай функциите - в краен случай направи си наследник на класа и оувъррайт на споменатата функция. По бързо ще бъде. Или си направи собствена функция.
И все пак имай предвид че не се знае какво и как се ползва - в смисъл може енкодинга на хост системата да влияе на функциите на Киликса.
Bеer? Mоre?
Плацебото
Re: Проблем с кирилицата
Стандартния towupper на libc си работи добре:
ch 447 Ch 427
ia 44f Ia 42f
#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
Re: Проблем с кирилицата
> Киликс не съм ползвал а и не знаех че има и 4 байтов енкодинг. Чудя се дали
> не е чисто Борландска измислица.
Не е. Новите версии на Unicode вече не се събират в 16 бита, затова има UCS-4/UTF-32 :)
> не е чисто Борландска измислица.
Не е. Новите версии на Unicode вече не се събират в 16 бита, затова има UCS-4/UTF-32 :)