Rust将unicode字符转义为字符串



我正在通过HTTP查询API我正在用以下返回JSON数据

... Dv\u016fr Kr\u00e1lov\u00e9 nad Labem a okol\u00ed 5\u00a0km ...". 

当我在Firefox中打开相同的请求并显示原始数据时,以及当我尝试打印ln时,我都会看到这一点!Rust中的输出。

我希望Rust将这些解释为适当的字符。我已经尝试了下面的功能,我已经在谷歌上搜索过了,它部分工作,但它失败了一些字符

pub fn normalize(json: &str) -> core::result::Result<String, Box<dyn Error>> {
let replaced : Cow<'_, str> = regex_replace_all!(r#"\u(.{4})"#, json, |_, num: &str| {
let num: u32 = u32::from_str_radix(num, 16).unwrap();
let c: char = std::char::from_u32(num).unwrap();
c.to_string()
});
Ok(replaced.to_string())
}
Dvůr Králové nad Labem a okolí 5u{a0}km

处理此类JSON数据的正确方法是什么?

您似乎有一个json编码的字符串。相同数据的锈蚀编码字符串如下所示:

let s = "Dvu{016}fr Kru{00e1}lovu{00e9} nad Labem a okolu{00ed} 5u{00a0}km";

要转换json编码的字符串,可以使用serde,如下所示:

fn main() {
let json_encoded = "Dv\u016fr Kr\u00e1lov\u00e9 nad Labem a okol\u00ed 5\u00a0km";

let result: Result<String, serde_json::Error> = serde_json::from_str(&format!(""{}"", json_encoded));
match result {
Err(e) => println!("oops: {}", e),
Ok(s)  => println!("{}", s)
}
}

输出:

Dvůr Králové nad Labem a okolí 5 km

参见操场

此外,这个相关的问题可能很有用:如何使用Unicode转义序列正确解析JSON?

最新更新