我有一个结构体,它的字段之一是pathbuf,struct A { pub first:bool,pub path:PathBuf,} Then path可以包含无效的utf-8字符,因为Linux允许创建包含无效utf-8字符的文件和文件夹。我使用rmp_serde::to_vec_named()从结构体对象中获取vec。但是,如果path包含无效的utf-8字符,它会崩溃,并出现错误:SerdeEncodeMspack((“path contains invalid UTF-8 characters”))。
有没有什么方法可以用无效的utf-8字符编码一个结构而不跳过它?
2条答案
按热度按时间lqfhib0f1#
在序列化时,你能使用一个自定义的反序列化函数将它转换成OsString吗?
像这样的东西应该工作。
字符串
woobm2wo2#
对于大多数项目来说,值得考虑的是,是否值得尝试并支持非UTF-8路径,或者是否可以在应用程序的边界拒绝它们。
我维护了一个名为camino的项目。这个库提供了
Utf8Path
和Utf8PathBuf
,它们类似于Path
和PathBuf
,但有一个类型级别的Assert,即它们包含有效的UTF-8。这大大简化了路径处理,但牺牲了一些灵活性(但这种灵活性通常是海市蜃楼,正如README中列出的“makefile问题”所解释的那样)。