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 [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact > [EMAIL PROTECTED] > -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

