YuzukiTsuru / SinsyPlus

Singing Voice Synthesis System based on Sinsy
http://gloomyghost.com/SinsyPlus/
MIT License
23 stars 3 forks source link

curl函数报错 #5

Closed ghost closed 4 years ago

ghost commented 4 years ago

在windows环境下跑main.py报错,排查发现curl.py的curl报错。

单独跑curl函数,textsrc输出空列表【[]】。打印乱码:

'grep' �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���

去除os.popen传入的字符串后面的【 | grep \"lf0\"】,则可以跑,但是解码错误,报错如下:

File "E:/lab/sinsyplus/SinsyPlus-master/curl.py", line 8, in curl textsrc = f.readlines() UnicodeDecodeError: 'gbk' codec can't decode byte 0x9e in position 2277: illegal multibyte sequence

请问这个问题怎么解决呢?

ghost commented 4 years ago

搜索解决了,参考讨论帖: https://www.v2ex.com/t/458543

这个问题在Windows环境出现,在Unix系的环境很少出现。

os.popen 相当于 subprocess.Popen + io.TextIOWrapper,而io.TextIOWrapper 默认使用的编码是 locale.getpreferredencoding(False),本地的preferredencoding是cp936。

解决方法是先读入bytes,然后再decode。把原代码:

f = os.popen(command, mode="r")

修改为:

f = os.popen(command) textsrc = f.buffer.readlines() textsrc = [line.decode('utf8') for line in textsrc]

以上代码在windows环境能跑通,可以兼容windows系统的环境,可以在后续版本更新,供参考。

ghost commented 4 years ago

在windows下os.popen的command不能有【| grep \"lf0\"】,windows的cmd没有grep指令,command的后缀不要这个【| grep \"lf0\"】也可以。

YuzukiTsuru commented 4 years ago

原来写的调用非常垃圾,我也不打算更新了