python - 编码和解码 UTF-8 的问题
问题描述
我正在尝试接收输入文本,将其保存到文件并调用另一个将文本到语音应用到它的进程。几天来我一直在努力编码,需要一些帮助。
起初,我只是按原样从 POST 请求中获取输入文本并将其保存到文件中,但我会收到如下错误:
File "/home/.../merlin/src/run_merlin.py", line 1224, in <module>
main_function(cfg)
File "/home/.../merlin/src/run_merlin.py", line 572, in main_function
label_normaliser.perform_normalisation(in_label_align_file_list, binary_label_file_list, label_type=cfg.label_type)
File "/home/.../merlin/src/frontend/linguistic_base.py", line 68, in perform_normalisation
self.extract_linguistic_features(ori_file_list[i], output_file_list[i], label_type)
File "/home/.../merlin/src/frontend/label_normalisation.py", line 26, in extract_linguistic_features
A = self.load_labels_with_state_alignment(in_file_name)
File "/home/.../merlin/src/frontend/label_normalisation.py", line 487, in load_labels_with_state_alignment
utt_labels = fid.readlines()
File "/home/.../merlin/.venv/lib/python3.5/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 0: invalid start byte
所以我做了以下事情:
text = text.encode('utf-8').split()
file = codecs.open(filename, 'w+', 'utf-8')
file.write(text.decode('utf-8'))
file.close()
但同样的错误不断发生。我简单地尝试file.write(text)
了,没有解码,但这给了我以下错误:
Can't convert 'bytes' object to str implicitly
如果有帮助,我正在尝试使用Merlincodecs.py
,但如上所示,python在读取文件时似乎抛出了错误。
编辑:按照 Giacomo Catenazzi 的建议,我将代码更改为:
text = text (not encoded)
file = codecs.open(filename, 'w+', 'utf-8')
file.write(text)
file.close()
但同样的错误也会发生。我在问题的开头添加了完整的堆栈跟踪,因为问题似乎不是我认为的问题。
解决方案
推荐阅读
- c# - 如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?
- winforms - 重启应用程序后 kryptonDockingManager 保存文件和加载文件不起作用
- c# - 重命名 Azure 容器时出现 System.InvalidCastException
- batch-file - 在 Windows 中将命令作为函数参数传递
- vb.net - 如何修复从“ListViewItem”类型到“Integer”类型的转换无效。错误?
- doctrine-orm - 如何在学说查询中使用 CASE 和 SUBSTRING_INDEX?
- reactjs - 从 react.js 的下拉列表中获取初始值
- kubernetes - pod 是否通过服务来处理出站流量?
- u-boot - 未知命令 'boota' 尝试 'help' - 引导 u-boot 映像时出错
- vim - .vimrc 中的 vim 将 q 映射为 0 有意外行为