Reputation: 15778
Everything is in the question : I have a Php script that is a UTF-8 file. In this script I want to do this :
<?
echo "âêïû\n";
?>
If I run it in a Windows prompt I get this :
C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php
âêïû
C:\php>
I've not been able to find the right conversion scheme. I've tried also this code :
$tab = mb_list_encodings();
foreach ($tab as $enc1) {
foreach ($tab as $enc2) {
$t=mb_convert_encoding("âêïû\n", $enc1, $enc2);
if (strlen($t)<14) {
echo $enc1." ".$enc2." = ".$t."\n";
}
}
}
And I didn't find the right conversion !
Any help would be greatly appreciated
Upvotes: 14
Views: 23267
Reputation: 535
Try this another one. It's working with Russian encoding, I hope it will work with French:
class ConsoleHelper
{
/**
* @var boolean
*/
private static $isEncodingSet = false;
/**
* @param string $message
* @return string
*/
public static function encodeMessage($message)
{
$isWindows = (DIRECTORY_SEPARATOR == '\\');
if ($isWindows) {
if ( ! self::$isEncodingSet) {
shell_exec('chcp 866');
self::$isEncodingSet = true;
}
$message = iconv('utf-8', 'cp866', $message);
}
return $message;
}
}
Upvotes: 1
Reputation: 65619
The problem is Windows cmd line by default does not support UTF8. From this link, if you follow these
You should be able to output utf8.
Upvotes: 19
Reputation: 15778
You put me on the right track but there was kinddof a problem (I love Windows \o/) :
C:\php>chcp 65001
Page de codes active : 65001
C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php | more
Mémoire insuffisante.
Mémoire insuffisante = not enough memory.
If I try
C:\php>chcp 1252
C:\php>php -c C:\WINDOWS\php.ini -f mysqldump.php
C:\php>ééîîïïÂÂÂÂâûü
it works. Only God knows why. But it works. Thanks for putting me on the right track !!
By the way the php code to go properly form UTF8 to command prompt is :
echo mb_convert_encoding($utf8_string, "pass", "auto");
Upvotes: 8