[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: что-то интересное с кодировками



On 2006.07.14 at 21:48:41 +0300, Pavel wrote:

> Приложение тестировалось на тестовом сервере по дебианом, всё было 
> замечательно. Перенеся на продакшн, еще один дебиан, обнаружилось что 
> файлы записанные на диск невозможно прочесть, вместо русских букв там 
> крякозябли.

Кракозябли бывают разные. Какие именно? И какая локаль была у процесса,
которым файлы читали. И вообще в какой операционной системе их читали?

> Стал сравнивнивать окружение на тестовом и прод. серверах и выяснил что 
> на тестовом сервере у процесса сервера LC_ALL=ru_RU.UTF-8, а на продакшн 
> - LC_ALL=C. Для пробы изменил LC_ALL на продашн - русские буквы стали 
> отображаться нормально.

Вообще по хорошему счету LC_ALL вообще выставлять не надо. Если
выставить LANG, то можно потом поменять отдельные категории, скажем
LC_NUMERIC. А LC_ALL имеет более высокий приоритет.

> Вот что хочу спросить, где проблема? В моём коде который генерит UTF-8 
> текст и пишет его на диск или это потому что процесс у которого LC=C не 
> может по определению писать на диск UTF-8 текст?

Скорее всего - ни там,  ни там. Между твоим кодом и системным вызовом
write  имеется куча промежуточных слоев - всякие библиотеки классов, собственно
JRE, libc и т.д. Если в файле действительно НЕ русские буквы, в чем
следует убедиться просмотрев файлы на системе с заведомо известной
локалью, посредством наиболее примитивного вьюера, вроде less, 
а то и просмотром шестнадцатиричного дампа файла (хотя не люблю
читать utf-8 в шестнадцатиричном виде. UTF-16 еще куда ни шло), то
проблема скорее всего в каких-нибудь промежуточных библиотеках.

Еще может быть что файлы пишутся в каком-нибудь формате,
предусматривающем явное указание кодировки, например XML. И из-за
неверной локали стандартная функция библиотеки, формирующая файл, может
залепить туда например iso8859-1 в качестве кодировки, после чего
написать честные русские буквы в utf-8. Тогда честный вьюер, учитывающий
информацию из заголовков, покажет то, что обычно называют "крокозяблики"
- латинские буквы со всякими надчерками и крышечками. А при просмотре в
текстовом вьюере вроде less в правильной локали русские буквы будут
видны.



> Спасибо!
> Павел.
> 
> 
> -- 
> To UNSUBSCRIBE, email to debian-russian-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact 
> listmaster@lists.debian.org
> 



Reply to: