Lu jaymin <ljm51...@gmail.com> added the comment: If you declare the encoding at the top of the file, then everything is fine, because in this case Python will use `io.open` to open the file and use `stream.readline` to read one line of code, please see function `fp_setreadl` in `cpython/Parser/tokenizer.c` for detail.
But if you did not declare the encoding, then Python will use `Py_UniversalNewlineFgets` to read one line of raw bytes and check these raw bytes's encoding by `valid_utf8`. In my opinion, when the encoding of the file is utf-8, and because the default file encoding of Python3 is utf-8, so whether we declare encoding or did not is ok. Karthikeyan Singaravelan <rep...@bugs.python.org> 于2018年10月14日周日 下午1:06写道: > > Karthikeyan Singaravelan <tir.kar...@gmail.com> added the comment: > > Thanks for the report. Is this a case of encoding not being declared at > the top of the file or am I missing something? > > ➜ cpython git:(master) cat ../backups/bpo34979.py > s = > '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试' > > print("str len : ", len(s)) > print("bytes len : ", len(s.encode('utf-8'))) > ➜ cpython git:(master) ./python.exe ../backups/bpo34979.py > File "../backups/bpo34979.py", line 1 > SyntaxError: Non-UTF-8 code starting with '\xe8' in file > ../backups/bpo34979.py on line 1, but no encoding declared; see > http://python.org/dev/peps/pep-0263/ for details > > # With encoding declared > > ➜ cpython git:(master) cat ../backups/bpo34979.py > # -*- coding: utf-8 -*- > > s = > '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试' > > print("str len : ", len(s)) > print("bytes len : ", len(s.encode('utf-8'))) > ➜ cpython git:(master) ./python.exe ../backups/bpo34979.py > str len : 340 > bytes len : 1020 > > # Double the original string > > ➜ cpython git:(master) cat ../backups/bpo34979.py > # -*- coding: utf-8 -*- > > s = > '测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试' > > print("str len : ", len(s)) > print("bytes len : ", len(s.encode('utf-8'))) > ➜ cpython git:(master) ./python.exe ../backups/bpo34979.py > str len : 680 > bytes len : 2040 > > > Thanks > > ---------- > nosy: +xtreak > > _______________________________________ > Python tracker <rep...@bugs.python.org> > <https://bugs.python.org/issue34979> > _______________________________________ > ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34979> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com