Si escribo å
en CMD, los datos dejan de esperar para obtener más información y el ciclo se ejecuta hasta que presiono ctrl-c
. Si escribo un carácter "normal" como a-z0-9!?(), Funciona como se esperaba.Cómo leer caracteres no ASCII de la entrada estándar CLI
Ejecuto el código en CMD en Windows 7 con UTF-8 como conjunto de caracteres (chcp 65001
), el archivo se guarda como UTF-8 sin bom. Yo uso PHP 5.3.5 (cli).
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
Si cambio de juego de caracteres a chcp 1252
el bucle no se rompe cuando escribo å
y de impresión "> A", pero el "ÅÄÖåäö trabajan aquí" convertido "un ...“A-A ¥ äà ¶ ¡Trabaja aquí!". Y sé que puedo cambiar el archivo a ANSI, pero luego no puedo usar caracteres especiales como ╠╦╗.
Entonces, ¿por qué los fgets dejan de esperar la entrada de usuario después de haber tipeado åäö?
¿Y cómo puedo solucionarlo?
EDIT:
encuentra también un bicho raro. echo "öäåÅÄÖåäö work here! Or?".chr(10);
->��äåÅÄÖåäö work here! Or? re! Or?
. Si el primer carácter en eco es å/ä/ö
imprime caracteres extraños Y el resultado final duplicado con n - 1
caracteres ... (n = número de åäö en el comienzo de la cadena).
Por ejemplo: echo "åäö 1234" -> ??äö 123434
y echo åäöåäö 1234
->??äöåäö 1234 1234
.
Edit2 (resuelto):
El problema era chcp 65001
, ahora uso chcp 437
(chcp 437). ¡Muchas gracias a Timothy Martens!
Algunas preguntas sobre este problema: 1) ¿qué sucede cuando intenta escribir y 'å' en el CMD fuera del php? 2) Es lógico que un UTF-8 'Å' no sea lo mismo que un Windows-1252' Å', por lo tanto, el 'Ã' resultante. ¿Pero qué ocurre si tratas de convertir el archivo PHP a windows-1252? – Qqwy
** 1) ** åäö -> "comando no me gusta", echo åäö -> åäö. Entonces funciona Ambos con 'chcp 65001' (UTF-8) y' chcp 1252'. ** 2) ** Uso UTF-8 en cmd AND como juego de caracteres para el archivo PHP. Si utilizo Windows-1252 en el archivo PHP, nada cambia. Creo que el problema está en Windows/PHP. Cuando uso 'chcp 1252' funciona para ÅÄÖ (incluso si el archivo PHP es UTF-8), pero no puedo usar ╠╦╗ etc. – Sawny
Hombre, qué pregunta tan interesante ^^. Realmente tienes mi atención ahora. Voy a experimentar conmigo mismo un poco, y te contaré tan pronto como encuentre algo. – Qqwy