Unicode

7 отговора 338 прегледа
#1

Unicode

Здравейте,
Знаете ли как се разбира начина на кодиране на текстови файлове. Дали са уникод, или пък са с някакъв charset различен от стандартния. Някакви уин-апи функции или има сигнатури в самия файл.
Имам тука един сорс на делфи дето го прави това, но го прави абсолютно самостоятелно, без да ползва някакви специални функции.
Благодаря ви предварително.

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

Re: Unicode

Здрасти

Мисля, че UNICODE текстовите файлове започват с FF FE (шестнайсетично). И по това се различават от останалите текстови файлове
Ама не съм 100% сигурен.

Бии, за да те уважават!
Отговор
в отговор на Phill #3

Re: Unicode

ако е наистина текстов файл, а не специфичен стандартен или частен формат, няма никакви указания за кодировката.
ако сканираш файла за който знаеш, че е текстов и намериш в него байт със стойност 0, това СЪС СИГУРНОСТ Е unicode, но ако не намериш, не значи, че не е, въпреки че е малко вероятно, да няма вътре поне интервал или нов ред :)

П.П. наистина notepad и други текстови редактори слагат в началото FF FE, но това не е гаранция, да не говорим, че съгласно Windows1251 (кирилица) това не е невалидна комбинация, въпреки че е малко вероятно да я има в началото на файла, освен ако не си писал азбуката в обратен ред.

Редактирано от Плaмeн на

Отговор
в отговор на Плaмeн #4

Re: Unicode

FEFF (FFFE za little endian) e signaturata za UTF16. EFBBBF e za UTF8. i dwete pokazwat unicode. Win1251 ne e unicode (w smisyl - toj e samo izwadka ot unicode) i nqma na4in da razbere6 4e fajl e w win1251 codding, za html izri4no se ukazwa. ami towa e ob6to wzeto - ako e ascii fajla nqma na4in da razbere6 kakwo e kodiraneto, pri unicode nqma kodirane w smisyl na codepage - pri utf8 wseki simwol e direktno adresiran i po towa kosweno move6 da razbere6 za kakyw ezik stawa wypros. za towa da viwee unicode ;) - edinstwenoto neudobstwo e 4e trqbwa da se parswa :)

Отговор
в отговор на drone #5

Re: Unicode

Грубо казано Unicode е стандарт за описване на символи - в смисъл на даден символ от някой език (жив или мъртъв) е присвоено число.
А UTF8, UTF16, UTF32, Win1251 за начини за кодиране на това съответствие в съответният брой байтове за символ. В общия случай UTF16 съответства 1:1 с Unicode, но вече има и UTF32 (т.е. символа е кодиран с 4 байта), защото Unicode отдавна мина границата от 2 байтовия range.
Така, че UTF8 си е кодиране. И не виждам защо човек трябва да се тормози с парсване, като всяка среда (Windows, Linux пр.) си има съответните системни функции.
Вярно е, че за да разпознаеш дали даден текст е UTF8 или UTF16 напр., е нужна доста евристика (ако сигнатурата липсва или не и вярваш)....

---
Не е важно да си добър, важното е да си ман-и-як!
Отговор
в отговор на ess #6

Re: Unicode

e ne e to4no taka... utf8 ne e ednobajtow - mislq 4e be6e ot 1 do 4 bytes (ili be6e do 5!?!?) utf16 e poorqzan, no predimstwoto mu e, 4e fixnat na dwa bajta. ewristika nqma nikakwa, no pri utf8 si trqbwa parswane (wqrno, 4e si ima libowe za celta). win1251 ne e unicode. wyob6te s tiq kodowi tablici e golqma ludnica - wseki si ima swoj - IBM, MS, MAC, ISO, abe ludnica ;) a unicode si e unicode, nadqwam se skoro we4e wsi4ko da e unicode

Отговор
в отговор на drone #7

Re: Unicode

Да, UTF8 не е еднобайтово кодиране, така е. А за евристиката не си прав.

Извадка от Win32 API help-a:

IsTextUnicode
The IsTextUnicode function determines whether a buffer is likely to contain a form of Unicode text. The function uses various statistical and deterministic methods to make its determination, under the control of flags passed via lpi. When the function returns, the results of such tests are reported via lpi.
BOOL IsTextUnicode(

CONST VOID* pBuffer, // input buffer to be examined
int cb, // size of input buffer
LPINT lpi // options
);


И още нещо: то и сега всичко може да си правиш Unicode, ама за връзка с външният свят ти трябват всичките тия UTFxx, Win1251 и прочие...

---
Не е важно да си добър, важното е да си ман-и-як!
Отговор
в отговор на ess #8

Re: Unicode

Здравейте,

Вече си оправих нещата, попрочетох тва онова, разгледах и някой друг сорс. Прави сте за всичко.

Благодаря!

и- Unicode рулзз

Отговор