none
Проблема с отображением русских символов. RRS feed

  • Вопрос

  • Проблема с кодировкой русских символов.

    Скрипт PowerShell'а читает из текстового файла текст и отправляет его в php скрипт (извиняюсь за тофтологию). Тот выполняет действия и выводит ответ через echo. Далее PowerShell принимает его, записывает в файл и выводит в окно.

    Код PowerShell скрипта:

    $c=New-Object System.Collections.Specialized.NameValueCollection
    $n1 = Get-Content C:\proga\out_text.txt
    $c.Add('par1',$n1)
    $wc = new-object system.net.webclient
    $d = $wc.uploadvalues("http://адрес_сайта/script.php",$c)
    $c=[text.encoding]::ascii.getString($d)
    $c | out-file C:\proga\in_text.txt
    type C:\proga\in_text.txt

    Код php скрипта:

    <? 
    $par=$_POST['par1'];
    if ($par=='привет')
    {
    echo iconv("UTF-8", "windows-1251", 'верно verno');
    }
    else
    {
    echo  iconv("UTF-8", "windows-1251", 'неверно neverno');
    }
    ?>
    Соответственно в out_text.txt лежит слово привет.

    При выполнении кода возвращается результат:

    ????? verno

    Пробовал менять различные кодировки как в самом php с помощью iconv, так и в powershell'е с помощью функции

    function ConvertTo-Encoding ([string]$From, [string]$To){
    	Begin{
    		$encFrom = [System.Text.Encoding]::GetEncoding($from)
    		$encTo = [System.Text.Encoding]::GetEncoding($to)
    	}
    	Process{
    		$bytes = $encTo.GetBytes($_)
    		$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
    		$encTo.GetString($bytes)
    	}
    }


    Также находил  что ???? может являться следствием невозможности отображения символов и лечить нужно изменением шрифта окна PS на Lucida Console, и сменой кодировки окна с помощью chcp.

    Ни чего не помогло. Возможно я что-то упустил или неправильно сделал?

    Есть подозрение что это связанно с кодировкой самого PS cp866, если не ошибаюсь. Еще мне не очень понятно что возвращает метод (если ошибся в терминологии тапками не кидать=))

    uploadvalues

    в смысле кодировки. Потому как, если убрать строчку

    $c=[text.encoding]::ascii.getString($d)

    то результатом будет столбец цифр.


    • Изменено Lavio 23 февраля 2012 г. 12:43
    23 февраля 2012 г. 12:20

Ответы

Все ответы