Unicode
7 отговора
338 прегледа
Unicode
Здравейте,
Знаете ли как се разбира начина на кодиране на текстови файлове. Дали са уникод, или пък са с някакъв charset различен от стандартния. Някакви уин-апи функции или има сигнатури в самия файл.
Имам тука един сорс на делфи дето го прави това, но го прави абсолютно самостоятелно, без да ползва някакви специални функции.
Благодаря ви предварително.
Знаете ли как се разбира начина на кодиране на текстови файлове. Дали са уникод, или пък са с някакъв charset различен от стандартния. Някакви уин-апи функции или има сигнатури в самия файл.
Имам тука един сорс на делфи дето го прави това, но го прави абсолютно самостоятелно, без да ползва някакви специални функции.
Благодаря ви предварително.
Re: Unicode
Здрасти
Мисля, че UNICODE текстовите файлове започват с FF FE (шестнайсетично). И по това се различават от останалите текстови файлове
Ама не съм 100% сигурен.
Бии, за да те уважават!
Мисля, че UNICODE текстовите файлове започват с FF FE (шестнайсетично). И по това се различават от останалите текстови файлове
Ама не съм 100% сигурен.
Бии, за да те уважават!
Re: Unicode
ако е наистина текстов файл, а не специфичен стандартен или частен формат, няма никакви указания за кодировката.
ако сканираш файла за който знаеш, че е текстов и намериш в него байт със стойност 0, това СЪС СИГУРНОСТ Е unicode, но ако не намериш, не значи, че не е, въпреки че е малко вероятно, да няма вътре поне интервал или нов ред :)
П.П. наистина notepad и други текстови редактори слагат в началото FF FE, но това не е гаранция, да не говорим, че съгласно Windows1251 (кирилица) това не е невалидна комбинация, въпреки че е малко вероятно да я има в началото на файла, освен ако не си писал азбуката в обратен ред.
ако сканираш файла за който знаеш, че е текстов и намериш в него байт със стойност 0, това СЪС СИГУРНОСТ Е unicode, но ако не намериш, не значи, че не е, въпреки че е малко вероятно, да няма вътре поне интервал или нов ред :)
П.П. наистина notepad и други текстови редактори слагат в началото FF FE, но това не е гаранция, да не говорим, че съгласно Windows1251 (кирилица) това не е невалидна комбинация, въпреки че е малко вероятно да я има в началото на файла, освен ако не си писал азбуката в обратен ред.
Редактирано от Плaмeн на
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 :)
Re: Unicode
Грубо казано Unicode е стандарт за описване на символи - в смисъл на даден символ от някой език (жив или мъртъв) е присвоено число.
А UTF8, UTF16, UTF32, Win1251 за начини за кодиране на това съответствие в съответният брой байтове за символ. В общия случай UTF16 съответства 1:1 с Unicode, но вече има и UTF32 (т.е. символа е кодиран с 4 байта), защото Unicode отдавна мина границата от 2 байтовия range.
Така, че UTF8 си е кодиране. И не виждам защо човек трябва да се тормози с парсване, като всяка среда (Windows, Linux пр.) си има съответните системни функции.
Вярно е, че за да разпознаеш дали даден текст е UTF8 или UTF16 напр., е нужна доста евристика (ако сигнатурата липсва или не и вярваш)....
---
Не е важно да си добър, важното е да си ман-и-як!
А UTF8, UTF16, UTF32, Win1251 за начини за кодиране на това съответствие в съответният брой байтове за символ. В общия случай UTF16 съответства 1:1 с Unicode, но вече има и UTF32 (т.е. символа е кодиран с 4 байта), защото Unicode отдавна мина границата от 2 байтовия range.
Така, че UTF8 си е кодиране. И не виждам защо човек трябва да се тормози с парсване, като всяка среда (Windows, Linux пр.) си има съответните системни функции.
Вярно е, че за да разпознаеш дали даден текст е UTF8 или UTF16 напр., е нужна доста евристика (ако сигнатурата липсва или не и вярваш)....
---
Не е важно да си добър, важното е да си ман-и-як!
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
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.
И още нещо: то и сега всичко може да си правиш Unicode, ама за връзка с външният свят ти трябват всичките тия UTFxx, Win1251 и прочие...
---
Не е важно да си добър, важното е да си ман-и-як!
Извадка от 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 и прочие...
---
Не е важно да си добър, важното е да си ман-и-як!
Re: Unicode
Здравейте,
Вече си оправих нещата, попрочетох тва онова, разгледах и някой друг сорс. Прави сте за всичко.
Благодаря!
и- Unicode рулзз
Вече си оправих нещата, попрочетох тва онова, разгледах и някой друг сорс. Прави сте за всичко.
Благодаря!
и- Unicode рулзз