|
|
|
| В какой кодировке возвращаются строки, строковых функций??(это связано с локалью) | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 21:16)
| | Кодировка - это способ интерпретации, данные возвращаются в едином виде при любой кодировке - так как это набор чисел, а вот отображаются они в соответствии с кодировкой. Если же речь идет не о строковых функциях, а скажем функциях времени, где могут возвращаться имена месяцев, дни недели, то кодировка зависит от кодировки локали (это может быть и Windows-1251, и UTF-16, и UTF-8 и даже кое-где KOI8-R встречается). | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 21:23)
| | У меня проблема с локалью,
echo setlocale(LC_ALL, 'ru_RU.cp1251');
echo '<br />', strftime('Число: %d, месяц: %B, день недели: %A');
echo strtolower("ЫВРОАЫ");
|
Сетлокейл работает и возвращает то, что нужно и вторая функция работает, а вот в нижний регистр не хочет переводить. | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 21:45)
| | А вы принципиально хотите strtolower() воспользоваться? Она вообще очень капризная и мало где работает, даже у тех, у кого с локалью вроде все в порядке (она вообще изначально на английский алфавит ориентирована)... ведь можно просто написать свою функцию, которая будет заменять массив прописных букв на массив строчных - в скорости практически не потеряете. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 21:52)
| | Просто хочется розобратса под корень.
В винде она работала, а на линуксе выпендривается.
А любой текстовый редактор использует такой же принцип просмотра текста кодирвкой как и браузер?? | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 22:04)
| | Ну... нет, у редакторов кодировки часто жестко зашиты, нет автоопределения, да и как-то принято в рамках операционной системы с одной кодировкой работать - это на браузер может свалиться все, что угодно. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:02)
| | Спасибо | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 22:04)
| | Вы прям, как не линуксоид :))), давайте разбираться, в век интернета ман везде есть, не обязательно даже Linux иметь. setlocale() это вообще-то системный вызов, о нем много интересного можно узнать в мане, я вот чего в man setlocale вычитал (Ubuntu)
Linux (that is, glibc) supports the portable locales "C" and "POSIX".
In the good old days there used to be support for the European Latin-1
"ISO-8859-1" locale (e.g., in libc-4.5.21 and libc-4.6.27), and the
Russian "KOI-8" (more precisely, "koi-8r") locale (e.g., in
libc-4.6.27), so that having an environment variable
LC_CTYPE=ISO-8859-1 sufficed to make isprint(3) return the right
answer. These days non-English speaking Europeans have to work a bit
harder, and must install actual locale files.
| Кстати, я эти старые добрые времена отлично помню, и помню как Linux-ы шуршали под KOI8-R, потом кое-кто стал использовать UTF-8, а сейчас даже не знаю, чего там и как - надо по-новой разбираться. Но тут интересна последняя фраза, они говорят о каких-то сложностях для не-английских пользователей, что дескать новая glibc сейчас поддерживает ISO-кодировку, что вроде как нужно отдельно файлы локали устанавливать, если нужно, чтобы работало с нормальными кодировками.
Кстати попробуйте локаль выставить в кодировку ISO-8859-5 (это наша русская ISO кодировка), ну и соответственно как-то файл в ней создать - сработает или нет. Если я правильно понимаю, она должна быть у вас и с ней не должно быть проблем. Хотя может её тоже отдельно ставить. У вас раздел /etc/i18n есть? Если есть, то что там? | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:17)
| | файл есть но там вот такая каша /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
umask 022
|
| |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:24)
| | Ну это да, я уже понял, что там ничего путного нет - стер, а папка /etc/i18n есть? Вообще в /etc/ поищите при помощи find папку i18n, может она внутри других папок? | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:27)
| | Да есть такое, там папка под название Locales есть и еще файл SUPPORTED | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:30)
| | В Locales и должны быть локали, что там? | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:36)
| | Там очень много файлов, в каждом примерно такое содержание, но только для разных стран.
comment_char %
escape_char /
%
% Russian Language Locale for Ukraine
% Source: RFC 2319
% Contact: Denis V. Dmitrienko
% Email: denis@denix.org
% Language: ru
% Territory: UA
% Revision: 1.2
% Date: 1998-05-03
% Application: general
% Users: general
% Charset: KOI8-U
% Distribution and use is free, also
% for commercial purposes.
и т.д. там дальше много всего написано
| |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:40)
| | Как файлы называются?
>% Charset: KOI8-U
Это кодировка в которой работает данная локаль, если её установите, текст должен быть в этой кодировке. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:45)
| | Файл называется ru_UA | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:47)
| | Если захотите выставить себе эту локаль, то в setlocale() вместо 'ru_RU.cp1251' нужно записать 'ru_UA.KOI8-U' и так со всеми остальными локалями, которые вы захотите задействовать (понятное дело, регистр имеет значение, кодировка тоже). UA - это понятное дело Украина, KOI8-U - это украинская кодировка. | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:30)
| | SUPPORTED, кстати, будет не лишним почитать, там может быть ценная информация (ну, если вдруг он окажется текстовым и читаемым, что скорее всего так и есть :). | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:37)
| | в supported просто перечислен список все локалей, но в инете я вычитал что желанные локали нужно загрузит терминалом. | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:44)
| | Попробуйте какую-нибудь русскую загрузить, а потом выставить её в PHP. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 23:46)
| | Направления копания я понял, спасибо.Буим пробовать. | |
|
|
|
|
|
|
|
для: demonow
(23.01.2012 в 23:57)
| | Расскажите потом, что накопали, тоже в ближайшее время Ubuntu заводить буду. | |
|
|
|
|
|
|
|
для: cheops
(24.01.2012 в 00:26)
| | )))Я вас заразил???))) | |
|
|
|
|
|
|
|
для: demonow
(24.01.2012 в 00:29)
| | Ну можно и так сказать :))) На самом деле мне давно надо было хороший дистрибутив с современными X-ами поставить, я имею дело только с серверами и голой консолью, что, конечно, очень полезно, но напрочь исключает программирование GUI под X-ы. Поэтому вяло разбирался в дистрибутивах, что там сейчас и как и понял, что ставить придется Ubuntu (как назло именно с этой веткой никогда дела не имел и вообще от Debian-направления всегда в стороне был). А тут стало быть время подошло, все тяну тяну, но бесконечно долго откладывать нельзя... делал тут парочку набегов, но с головой еще не окунался :))) | |
|
|
|
|
|
|
|
для: cheops
(24.01.2012 в 00:50)
| | У меня убунту начиная с 11.04(ПК) и ноут (11.10)(и там и там работает). На более старых версиях вроде чуть по другому настраивать надо дак вот:
настраивать локали научился, тоесть при вызове функции setlocale("LC_ALL","любая локаль") все работает отлично, хотя и этот strtolower() и date() упрямо не хочет работать ну и хер с ними, зато у нас есть strftime() который прекрасно работает.
1.сначало посмотрим какие локали у нас есть на системе командой "locale -a"
2.теперь посмотрим список всех доступных локалей в том файле supported о котором мы говорили
3.Выбираем из того списка ту локаль, которая понравилась, я например выбрал uk_UA.KOI8-U потому-что ее нету изначально в списке.
4.Теперь нужно зайти в файл locale, который находится /var/lib/locales/supported.d/locale и вписать туда нашу локаль.(uk_UA.KOI8-U)
5.Теперь в терминале нужно выполнить команду sudo dpkg-reconfigure locales там оно чете побормочет и вконце возле название нашей локали напишет done
6.Надо перегрузится.
Теперь название месяцев и прочего на украинском.
Надеюсь эта инфа кому-то поможет.
Ну вот и все, будь она проклята эта локаль.))) | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 21:23)
| | Но ведь кодировка, все-ровно где-то должна быть прописана в файле, даже пустом, и получается когда функция возвращает что-то строковое(те же символы в виде цифр) она интерпретируется соответственно этой кодировке?? | |
|
|
|
|
|
|
|
для: demonow
(24.01.2012 в 15:37)
| | В простом файле кодировка никак не указывается, файл просто содержит набор данных, а вот правила в соответствии с которыми данные интерпретируются называется кодировкой. Переключите эту страницу в KOI8R, в UTF-8 и будут отображаться крокозяблики - верные данные интерпретируются неверной кодировкой. Поэтому в Web кодировка указывается при помощи META-тэгов и HTTP-заголовков. В простых файлах этого нет (ну за исключением BOM в UTF-8, от которого больше проблем, чем пользы), ну и понятно специальных бинарных форматах, которые могут сообщить программе свою кодировку, если это предусмотрено самой программой. | |
|
|
|
|
|
|
|
для: cheops
(24.01.2012 в 15:43)
| | спасибо | |
|
|
|