Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Windows определить используемую кодировку
 
 автор: Shecspi   (15.07.2009 в 12:14)   письмо автору
 
 

Здравствуйте. Как определить используемые операционной системой локаль и кодировку? На Linux эта информация содержится в переменной окружения LANG и имеет следующий вид: ru_RU.UTF8 - локаль.кодировка. Есть ли что-нибудь похожее в Windows?

  Ответить  
 
 автор: sim5   (15.07.2009 в 13:01)   письмо автору
 
   для: Shecspi   (15.07.2009 в 12:14)
 

Определить в чем?

  Ответить  
 
 автор: pini-pini   (15.07.2009 в 13:01)   письмо автору
 
   для: Shecspi   (15.07.2009 в 12:14)
 

Почти наверняка эти:
в `консоли` 866
в остальном 1251

  Ответить  
 
 автор: Shecspi   (15.07.2009 в 15:46)   письмо автору
 
   для: pini-pini   (15.07.2009 в 13:01)
 

Программа мультиязычная, а майкрософт в своё время для разных языков придумал разные кодировки, поэтому 1251 не подходит. Кодировка необходима та, что используется в системе для отображения интерфейса, или хотя бы нужно узнать локализацию Windows, а потом по ней определить кодировку. Если Vista и Seven нормально понимают UTF8, то в XP при создании папки с юникодным именем получаются "крякозябры".

  Ответить  
 
 автор: Shecspi   (15.07.2009 в 16:47)   письмо автору
 
   для: Shecspi   (15.07.2009 в 15:46)
 

При создании файлов/папок и в Vista с семёркой получаются нечитаемые символы. Что я хочу: программа берёт из файла локализации название для новых файлов, конвертирует его в подходящую кодировку и создаёт файл. Но вот как определить кодировку?

  Ответить  
 
 автор: sim5   (15.07.2009 в 17:12)   письмо автору
 
   для: Shecspi   (15.07.2009 в 16:47)
 

Windows русская, это 1251, что еще определять?

  Ответить  
 
 автор: Trianon   (15.07.2009 в 17:16)   письмо автору
 
   для: sim5   (15.07.2009 в 17:12)
 

>Windows русская, это 1251, что еще определять?

[капитан очевидность on]
не у всех
[капитан очевидность off]

  Ответить  
 
 автор: sim5   (15.07.2009 в 17:37)   письмо автору
 
   для: Trianon   (15.07.2009 в 17:16)
 

Хотите сказать что ваша русская локализация Win на 1252 или еще круче?

  Ответить  
 
 автор: Trianon   (15.07.2009 в 18:06)   письмо автору
 
   для: sim5   (15.07.2009 в 17:37)
 

Хочу сказать, что не у всех Windows русская.

  Ответить  
 
 автор: Shecspi   (15.07.2009 в 18:42)   письмо автору
 
   для: sim5   (15.07.2009 в 17:12)
 

> Windows русская, это 1251, что еще определять?
1251 применяется только для кириллицы, а ведь есть ещё греческие, турецкие, арабские и другие языки. По моему, всегу существует 9 кодировок для MS Windows - от 1250 до 1258.

  Ответить  
 
 автор: sim5   (15.07.2009 в 18:57)   письмо автору
 
   для: Shecspi   (15.07.2009 в 18:42)
 

А на том, чем вы пишите свою программу, есть трудности с определением локализации?

  Ответить  
 
 автор: Shecspi   (15.07.2009 в 20:28)   письмо автору
 
   для: sim5   (15.07.2009 в 18:57)
 

Программа на PHP. Исходя из этого, да, есть.

  Ответить  
 
 автор: .....   (15.07.2009 в 21:44)
 
   для: Shecspi   (15.07.2009 в 20:28)
 

у пхп такая локаль
<?php
print_r
(setlocale(LC_ALL0));
?>

которая на XP никак не хочет устанавливаться в utf-8

  Ответить  
 
 автор: ''''''   (15.07.2009 в 22:57)
 
   для: .....   (15.07.2009 в 21:44)
 

<?
print_r
(setlocale(LC_ALL""));

  Ответить  
 
 автор: sim5   (16.07.2009 в 00:17)   письмо автору
 
   для: Shecspi   (15.07.2009 в 20:28)
 

Я немного офигевать начинаю.... То есть, вы пишите серверное приложение, а вам надо узнать локализацию клиента? Собственно браузера.

  Ответить  
 
 автор: Trianon   (16.07.2009 в 00:29)   письмо автору
 
   для: sim5   (16.07.2009 в 00:17)
 

Я до сих пор не понял, о двух машинах речь идет, или об одной. :)

  Ответить  
 
 автор: sim5   (16.07.2009 в 00:34)   письмо автору
 
   для: Trianon   (16.07.2009 в 00:29)
 

>автор: Shecspi (15.07.2009 в 20:28) письмо автору
>Программа на PHP. Исходя из этого, да, есть.

Не думаю, что он свое приложение с Апач (и еже с ним) распространяет на клиентов. )

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 08:06)   письмо автору
 
   для: sim5   (16.07.2009 в 00:17)
 

> Я немного офигевать начинаю.... То есть, вы пишите серверное приложение, а вам надо узнать локализацию клиента? Собственно браузера.
Не браузера, а компьютера, на котором запускается программа. Браузер участия в процессе, как и веб-сервер не принимает. Т.е., грубо говоря, программа имеет следующий вид:
<?php mkdir('home/shecspi/Новая папка'?>

Но т.к. этот скрипт сохранён в UTF-8, то и имя папки будет в UTF-8, а Windows такие имена не понимает. Как создать папку с нормальным именем?

  Ответить  
 
 автор: Trianon   (16.07.2009 в 11:59)   письмо автору
 
   для: Shecspi   (16.07.2009 в 08:06)
 

А как Вы определяете, что нужно писать Новая папка а не New folder или еще как-нибудь?
Просто если пишете на русском, то sim5 абсолютно прав. Кеодировкой русской windows является Windows-1251, в которой и надо оформить программу.
Если приложение мультиязычное - придется вытягивать данные из реестровых ветвей. Как вариант.

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 12:52)   письмо автору
 
   для: Trianon   (16.07.2009 в 11:59)
 

А где находятся сведения о локали/кодировке в реестре?

  Ответить  
 
 автор: Trianon   (16.07.2009 в 13:21)   письмо автору
 
   для: Shecspi   (16.07.2009 в 12:52)
 

HKEY_CURRENT_USER\Control Panel\International\
HKEY_CLASSES_ROOT\MIME\Database\Codepage\1251
HKEY_CLASSES_ROOT\MIME\Database\Rfc1766
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CodePage\ACP
для затравки...

  Ответить  
 
 автор: sim5   (16.07.2009 в 16:47)   письмо автору
 
   для: Trianon   (16.07.2009 в 13:21)
 

Вообще-то значание языка указывается как REG_DWORD и для русского равно 0х00000419 (1049).

  Ответить  
 
 автор: Trianon   (16.07.2009 в 16:50)   письмо автору
 
   для: sim5   (16.07.2009 в 16:47)
 

Ну да. В первом из перечисленных разделов. Ключ Locale.

  Ответить  
 
 автор: sim5   (16.07.2009 в 17:00)   письмо автору
 
   для: Trianon   (16.07.2009 в 16:50)
 

Языковые параметры нужно выбирать из той ветви реестра, в которой находятся Язык и региональные установки, это:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Control Panel\Desktop\\MultiUILanguageID
Параметр ограничивает выбор пользователей указанным языком, отключая меню и элементы управления в диалоговом окне "Язык и стандарты" панели управления. Если указанный язык не установлен на конечном компьютере, по умолчанию выбирается английский язык.
Тип: REGDWORD;
Значение: (по умолчанию параметра нет; 1049 = только русский; 1033 = только английский и т.д.)
Вообще автору скачать отсюда описание реестра, пусть читает. А что это за извращение такое - приложение на РНР?

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 17:31)   письмо автору
 
   для: sim5   (16.07.2009 в 17:00)
 

> А что это за извращение такое - приложение на РНР?
http://code.google.com/p/flight-files/

  Ответить  
 
 автор: sim5   (16.07.2009 в 17:36)   письмо автору
 
   для: Shecspi   (16.07.2009 в 17:31)
 

Я и говорю - извращение :) Ну что это за приложение, которое требует еще установки всякой всячины. Это не приложение, а программа по интересам.)
Все это можно реализовать без РНР, благо языков программироания хоть отбавляй.

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 17:55)   письмо автору
 
   для: sim5   (16.07.2009 в 17:36)
 

Несколько странное заявление. Для работы любой программы на интерпретируемом языке требуется как минимум интерпретатор. Это вполне нормально. Да и к тому же всякая всячина - это одна библиотека размером чуть больше мегабайта?

  Ответить  
 
 автор: sim5   (16.07.2009 в 18:13)   письмо автору
 
   для: Shecspi   (16.07.2009 в 17:55)
 

>Для работы любой программы на интерпретируемом языке требуется как минимум интерпретатор.

Вот именно. Я о том же, и даже, если считать РНР вершиной возможного по отношению к Бейсику, то все равно писать на нем приложения для клиента не стал бы даже в пьяном угаре. Для этого есть Си, или даже Делфи, и то лучше. Я не хоучу (как пользователь) быть обязательно привязанным к неким условиям, и потому, выбирая программу "Файловый менеджер", выбрал бы иную, не требующую всякой хни для ее работы, и благо таковых полно ;-)

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 18:17)   письмо автору
 
   для: sim5   (16.07.2009 в 18:13)
 

А Вас кто заставляет пользоваться данной программой? Вы попросили - я показал.
Раз уж на то пошло, существует такая вещь, как репозиторий, и всё необходимое для работы той или иной программы тянется оттуда автоматически без участия пользователя.

  Ответить  
 
 автор: sim5   (16.07.2009 в 18:29)   письмо автору
 
   для: Shecspi   (16.07.2009 в 18:17)
 

Ну я же не против, пишите. :) Я просто о том, что не рассматриваю РНР, как инструмен для локальных приложений, да он и не является таковым, и изначально предназначался для работы сервер-клиент, и заточен именно под эти задачи. А репозитарий и автоматизация, это обязательно РНР?

  Ответить  
 
 автор: Shecspi   (16.07.2009 в 18:36)   письмо автору
 
   для: sim5   (16.07.2009 в 18:29)
 

> А репозитарий и автоматизация, это обязательно РНР?
Нет, но PHP в репозитории есть.
Просто узнал про существование библиотеки PHP-GTK, стало интересно, начал изучать, понял, что это вполне серьёзный инструментарий для разработки граф.интерфейса. Ну а теперь разрабатываю файл.менеджер.

  Ответить  
 
 автор: sim5   (16.07.2009 в 18:44)   письмо автору
 
   для: Shecspi   (16.07.2009 в 18:36)
 

Ну коли хочется на нем, пишите, успехов.)
На одной школьной олимпиаде, было задание перевести на все языки фразу: "Если б я был султан, я б имел трех жен.". Среди вариантов на английском, немецком, французском, и т.д. языках, стретился вариант и на ПАСКАЛЕ. Выглядел так:
BEGIN
  if (I=Sultan) then
    begin
      Get(First_Wife);
      Get(Second_Wife);
      Get(Third_Wife);
    end;
END.

:)

  Ответить  
 
 автор: ,,,,   (15.07.2009 в 13:11)
 
   для: Shecspi   (15.07.2009 в 12:14)
 

//<? C
#include <windows.h>

int main ()
{
    
char c[5];
    
    
MessageBox(0_itoaGetACP(), c10 )
    , 
"ANSI кодировка"MB_OK);
    
    
MessageBox(0_itoaGetOEMCP(), c10 )
    , 
"OEM кодировка"MB_OK);
    return 
0;
}

  Ответить  
 
 автор: Trianon   (15.07.2009 в 14:22)   письмо автору
 
   для: ,,,,   (15.07.2009 в 13:11)
 

> char c[5];

Тут Вы пожадничали.

Особенно если на консоли поставить кодировку utf8

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования