[英]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.