Когда пишу под винду какие-то консольные утилиты для себя, то пути тоже всегда через iconv конвертирую. А на линуксах не приходилось юзать русские символы. Ещё для вывода в консоль использую следующий велосипед (не нашёл способа перевести на юникод текущее консольное окно в винде автоматически):
<?php
// *********************************************************
class Console{
// *******************************************************
private $charset;
// *******************************************************
private function __construct(){ }
// *******************************************************
private function __clone(){ }
// *******************************************************
public static function getInstance(){
static $instance=null;
if($instance==null){
$instance=new self();
$instance->charset(stripos(PHP_OS,'win')===0?'cp866':'utf-8');
}
return $instance;
}
// *******************************************************
public function charset($charset=null){
if($charset==null) return $this->charset;
$this->charset=strtolower($charset);
}
// *******************************************************
public function read(){
return iconv($this->charset,'utf-8//IGNORE',fgets(STDIN));
}
// *******************************************************
public function write($string){
fputs(STDOUT,iconv('utf-8',$this->charset.'//IGNORE',$string));
}
// *******************************************************
}
// *********************************************************
?>
Пример использования:
<?php
$console=Console::getInstance();
$console->write("Выводим эту строку в консоль\n");
$str=$console->read(); // ждём ввод строки пользователем
?>
Расчёт на то, что сам скрипт после этого пишется полностью в UTF-8. На линуксе не проверял, но один чел сказал, что решение работает.