Encoding is wrong when I use subprocess.run in pytest

I have two files:

test_encoding.py

import subprocess
import sys
import pytest


def test_me():
    print('main: '+ sys.getdefaultencoding())
    print('main: '+ sys.stdout.encoding)
    subprocess.run(['python', 'p.py'],encoding='utf-8')
    pytest.fail('')


test_me()

p.py

import sys

print('sub: '+ sys.getdefaultencoding())
print('sub: '+ sys.stdout.encoding)

test_encoding.py merely calls p.py.

If I run python test_encoding.py, the encoding of the two processes are all utf8.

If I run pytest test_encoding.py, the encoding of sub process becomes cp936.

enter image description here

How do I make sub process always have utf8?