I have two code files which are “run_python.php” and “script.py”.
run_python.pyp
<html> <?php $out = `python script.py`; $out = iconv('cp949', 'utf-8', $out); echo $out; ?> </html>
script.py
import locale import sys print(locale.getdefaultlocale()) print(locale.getpreferredencoding()) print(sys.stdout.encoding)
When I run run_python.php, the output result on the browser is :
('ko_KR', 'cp949') cp949 cp949
When I run the script.py through the cmd(“python script.py”), the output result on the cmd is :
('ko_KR', 'cp949') cp949 utf-8
Why the encodings from sys.stdout.encoding
show those two different results?
I’m guessing that they’re running on two different shells and the stdout encodings show those two different results? Is that correct? If that’s right or wrong, how do you determine/verify that? It should be helpful if I could determine which shell I’m using on this testing envorinment which is Windows. I’ve searched for a long time, but only could I find was only on Linux.
Testing Environment:
System default locale : CP949 Console codepage : CP949 OS : Windows
Advertisement
Answer
When you run the Python script by itself, sys.stdout
is connected to the terminal. When it’s connected to a terminal, the default encoding is determined from the LC_CTYPE
or LC_ALL
environment variables.
When you run it from PHP, sys.stdout
is connected to a pipe. In this case, it defaults to 7-bit ASCII.