Unicode setlocale и strftime не работают в Windows

У меня есть одна страница, и это кодировка UTF-8, и если я пытаюсь запустить этот код в Unix-системе, все выглядит хорошо, но когда я пытаюсь запустить в Windows(7), некоторые персонажи выглядят вопросительным знаком (). Как можно нормально запустить код обеих двух систем (без использования iconv).

header('Content-Type: text/html; charset=UTF-8');
setlocale(LC_ALL, 'turkish');
echo strftime("%d %B %Y, %H:%M");

2 ответа

Решение

Для тех, у кого есть подобные проблемы на Linux (это может работать и для Windows, но не уверен).

Да, есть "Турецкий", но есть и "tr_TR.utf8". Если вы используете tr_TR.utf8, скорее всего, ваши проблемы будут смыты. То же самое относится и к "греческому". Вместо этого используйте 'el_GR.utf8'

В Linux вы можете проверить список локалей, чтобы найти правильные настройки для вашего сайта.

locale -a

Список слишком длинный, и вы не можете видеть все языки, поэтому вы можете просто скопировать его в файл, а затем открыть файл для проверки.

locale -a > locale.txt
vi locale.txt

или сделать локаль -a | grep languagecode для определенного языка

locale -a | grep tr

Microsoft Windows не поддерживает локали UTF-8. Поэтому, если вы предоставите турецкий язык, он выберет 8-битную кодовую страницу, которая позволяет представлять определенный язык.

Например, для языка иврит это будет кодовая страница-1255, для турецкого - 1254.

Таким образом, вы не можете использовать это на платформе MS-Windows.

Как можно нормально запустить код обеих двух систем (без использования iconv).

Возможно использовать кодировку не-utf8 под MS Windows.

Другие вопросы по тегам