簡體   English   中英

ruamel.yaml 0.17.16 python3 UnicodeEncodeError

[英]ruamel.yaml 0.17.16 python3 UnicodeEncodeError

我使用python3.5.2,ruamel.yaml版本是0.17.16,當我使用ruamel_yaml.dump(content, fp) ,出現錯誤

“UnicodeEncodeError:‘ascii’編解碼器無法對位置 434 中的字符‘\’’進行編碼:序號不在范圍內(128)”

在 ruamel/yaml/emitter.py write_comment 函數上。

我設置了ruamel_yaml.encoding = True ,當讀取文件時我也設置了 encoding='UTF-8',它不起作用。

然后我改成python3.7,沒有UnicodeEncodeError錯誤,但是我發現生成的文件有錯誤的'utf-8'錯誤。

ruamel.yaml 需要匹配哪個python 版本嗎? 或者如何解決這個問題?

我不知道為什么你在不同的 Python 版本中沒有得到錯誤和不同的結果。 AFAICT 在處理文件方面沒有任何 3.5 或 3.7 特定的內容。 盡管生命周期結束的 Python 3.5 仍受支持和測試。

您沒有提供太多代碼(您應該提供),但是從錯誤中我可以告訴您嘗試使用正確的單引號 ( ' , Unicode code point 2019) 轉儲某些內容。

您應該包含更多代碼,以便清楚文件的打開方式,並包含您運行代碼的平台 (Windows)。 您最有可能寫入文本文件( open('somefile.yaml') ),您應該在其中寫入為二進制文件打開的文件( open('somefile.yaml', 'wb')

默認情況下, YAML()實例已經將屬性.encoding設置為utf-8 ,因此再次設置將不起作用。

import sys
import pathlib
import ruamel.yaml

data = dict(text="here comes the unicode quote -> \u2019")
print('python version:', sys.version_info)

yaml = ruamel.yaml.YAML()
yaml_file = pathlib.Path('somefile.yaml')

# You can open the Path like this, but it is better to have ruamel.yaml do it
# with yaml_file.open('wb') as fp:
#     yaml.dump(data, fp)

yaml.dump(data, yaml_file)

readback = yaml_file.read_bytes()
print('{:02x}{:02x}{:02x}'.format(readback[-4], readback[-3], readback[-2]))

這使:

python version: sys.version_info(major=3, minor=5, micro=9, releaselevel='final', serial=0)
e28099

這是右單引號的預期 UTF-8 編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM