在 Rust 中,可以通过以下方式从字节中获取 UTF-8:
Rust是否有一种从字节中获取UTF-8字符串的方法,它可以转义错误而不是完全失败?
if let Ok(s) = str::from_utf8(some_u8_slice) {
println!("example {}", s);
}
这要么有效,要么无效,但 Python 有处理错误的能力,例如:
s = some_bytes.decode(encoding='utf-8', errors='surrogateescape');
在这个例子中,参数surrogateescape
将无效的utf-8序列转换为转义码,因此不会忽略或替换无法解码的文本,而是用一个字节字面表达式替换它们,这是有效的utf-8
。详情请参见:Python文档。Rust是否有一种从字节中获取UTF-8字符串的方法,它可以转义错误而不是完全失败?
from_utf8_lossy
不像 Python 那样提供处理错误的不同方式。无效的 utf-8 序列会被替换为U+FFFD
(与 Python 的replace
行为相匹配),而不是转义。因此,我认为这个问题的简短回答是“不”,尽管值得提到from_utf8_lossy
。 - ideasman42from_utf8_lossy
的文档说明:“在此转换期间,from_utf8_lossy() 将使用 U+FFFD REPLACEMENT CHARACTER 替换任何无效的 UTF-8 序列,它看起来像这样:�”。因此,这是一种替换,而不是转义序列。本答案的第一部分展示了如何编写带有转义序列的转换方法:https://dev59.com/SFgR5IYBdhLWcg3wV8He#41450295。 - ideasman42surrogateescape
是完全没有意义的;它似乎是OsStr
的另一种实现。 - Shepmaster"he\u{dcff}lo"
是一个编译时错误,而::std::char::from_u32(0xdcff)
返回None
。 - user4815162342