I am trying to write a dictionary file that contains Tibetan language word into yaml format. Problem is i couldn't encode/decode the file when writing the yaml file.
Here is code :
with open('tibetan_dict.yml', 'w', encoding='utf-8') as outfile:
yaml.dump(tibetan_dict, outfile, default_flow_style=False)
tibetan_dict contains:
{'ཀ་ཅ': '༡.་ནོར་རྫས་ཀྱི་སྤྱི་མིང་སྟེ། ཀ་ཅ་གསོག་འཇོག་ཀ་ཅས་ཚིམ་པར་བྱེད་ཅེས་པ་ལྟ་བུ།༢.འཚོ་བའི་ཡོ་བྱད་ཀྱི་སྤྱི་མིང་སྟེ། སྣོད་ཀ་ཅ་ཞེས་པ་ལྟ་བུ།',
'ཀ་ཅི': 'རས་ཆ་ཞིག་གི་མིང་།',
'ཀ་ཏོ་ར': 'གཞོང་བ་ལྟ་བུའི་ཟས་སྣོད་ཅིག་གི་མིང་སྟེ། }
OUTPUT i am getting :
"\u0F40\u0F0B\u0F45": "\u0F21.\u0F0B\u0F53\u0F7C\u0F62\u0F0B\u0F62\u0FAB\u0F66\u0F0B\
\u0F40\u0FB1\u0F72\u0F0B\u0F66\u0FA4\u0FB1\u0F72\u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F66\
\u0F9F\u0F7A\u0F0D \u0F40\u0F0B\u0F45\u0F0B\u0F42\u0F66\u0F7C\u0F42\u0F0B\u0F60\u0F47\
\u0F7C\u0F42\u0F0B\u0F40\u0F0B\u0F45\u0F66\u0F0B\u0F5A\u0F72\u0F58\u0F0B\u0F54\u0F62\
\u0F0B\u0F56\u0FB1\u0F7A\u0F51\u0F0B\u0F45\u0F7A\u0F66\u0F0B\u0F54\u0F0B\u0F63\u0F9F\
\u0F0B\u0F56\u0F74\u0F0D\u0F22.\u0F60\u0F5A\u0F7C\u0F0B\u0F56\u0F60\u0F72\u0F0B\u0F61\
\u0F7C\u0F0B\u0F56\u0FB1\u0F51\u0F0B\u0F40\u0FB1\u0F72\u0F0B\u0F66\u0FA4\u0FB1\u0F72\
\u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F66\u0F9F\u0F7A\u0F0D \u0F66\u0FA3\u0F7C\u0F51\u0F0B\
\u0F40\u0F0B\u0F45\u0F0B\u0F5E\u0F7A\u0F66\u0F0B\u0F54\u0F0B\u0F63\u0F9F\u0F0B\u0F56\
\u0F74\u0F0D"
"\u0F40\u0F0B\u0F45\u0F72": "\u0F62\u0F66\u0F0B\u0F46\u0F0B\u0F5E\u0F72\u0F42\u0F0B\
\u0F42\u0F72\u0F0B\u0F58\u0F72\u0F44\u0F0B\u0F0D"
CodePudding user response:
If you want non-ascii characters in the yaml output, you need to pass allow_unicode=True
when dump
ing.
>>> yaml.dump(tibetan_dict)
'"\\u0F40\\u0F0B\\u0F45": "\\u0F21.\\u0F0B\\u0F53\\u0F7C\\u0F62\\u0F0B\\u0F62\\u0FAB\\u0F66\\u0F0B\\\n \\u0F40\\u0FB1\\u0F72\\u0F0B\\u0F66\\u0FA4\\u0FB1\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\\n \\u0F9F\\u0F7A\\u0F0D \\u0F40\\u0F0B\\u0F45\\u0F0B\\u0F42\\u0F66\\u0F7C\\u0F42\\u0F0B\\u0F60\\u0F47\\\n \\u0F7C\\u0F42\\u0F0B\\u0F40\\u0F0B\\u0F45\\u0F66\\u0F0B\\u0F5A\\u0F72\\u0F58\\u0F0B\\u0F54\\u0F62\\\n \\u0F0B\\u0F56\\u0FB1\\u0F7A\\u0F51\\u0F0B\\u0F45\\u0F7A\\u0F66\\u0F0B\\u0F54\\u0F0B\\u0F63\\u0F9F\\\n \\u0F0B\\u0F56\\u0F74\\u0F0D\\u0F22.\\u0F60\\u0F5A\\u0F7C\\u0F0B\\u0F56\\u0F60\\u0F72\\u0F0B\\u0F61\\\n \\u0F7C\\u0F0B\\u0F56\\u0FB1\\u0F51\\u0F0B\\u0F40\\u0FB1\\u0F72\\u0F0B\\u0F66\\u0FA4\\u0FB1\\u0F72\\\n \\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\u0F9F\\u0F7A\\u0F0D \\u0F66\\u0FA3\\u0F7C\\u0F51\\u0F0B\\\n \\u0F40\\u0F0B\\u0F45\\u0F0B\\u0F5E\\u0F7A\\u0F66\\u0F0B\\u0F54\\u0F0B\\u0F63\\u0F9F\\u0F0B\\u0F56\\\n \\u0F74\\u0F0D"\n"\\u0F40\\u0F0B\\u0F45\\u0F72": "\\u0F62\\u0F66\\u0F0B\\u0F46\\u0F0B\\u0F5E\\u0F72\\u0F42\\u0F0B\\\n \\u0F42\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F0D"\n"\\u0F40\\u0F0B\\u0F4F\\u0F7C\\u0F0B\\u0F62": "\\u0F42\\u0F5E\\u0F7C\\u0F44\\u0F0B\\u0F56\\u0F0B\\\n \\u0F63\\u0F9F\\u0F0B\\u0F56\\u0F74\\u0F60\\u0F72\\u0F0B\\u0F5F\\u0F66\\u0F0B\\u0F66\\u0FA3\\u0F7C\\\n \\u0F51\\u0F0B\\u0F45\\u0F72\\u0F42\\u0F0B\\u0F42\\u0F72\\u0F0B\\u0F58\\u0F72\\u0F44\\u0F0B\\u0F66\\\n \\u0F9F\\u0F7A\\u0F0D "\n'
>>> yaml.dump(tibetan_dict, allow_unicode=True)
"ཀ་ཅ: ༡.་ནོར་རྫས་ཀྱི་སྤྱི་མིང་སྟེ། ཀ་ཅ་གསོག་འཇོག་ཀ་ཅས་ཚིམ་པར་བྱེད་ཅེས་པ་ལྟ་བུ།༢.འཚོ་བའི་ཡོ་བྱད་ཀྱི་སྤྱི་མིང་སྟེ།\n སྣོད་ཀ་ཅ་ཞེས་པ་ལྟ་བུ།\nཀ་ཅི: རས་ཆ་ཞིག་གི་མི
་།\nཀ་ཏོ་ར: 'གཞོང་བ་ལྟ་བུའི་ཟས་སྣོད་ཅིག་གི་མིང་སྟེ། '\n"
Note that both of these are valid yaml
though, and will deserialize to the same value.