< 返回版块

eweca-d 发表于 2021-04-28 14:23

写了一个网页的小程序,没有服务端,本来运行得不错,但现在开始需要有保存功能,不用服务端不行了。

基于最小化程序尺寸和尽量少改代码的原则,所以用rust写了一个本地服务端到127.0.0.1的一个端口上。使用POST方法交互时,上传英文没问题,上传中文就会变成类似“%E9%BB%98%E8%AE%A4%E8%AE%BE%E7%BD%AE”的乱码。

html带有utf-8标识,如下:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

rust解码如下:

let mut buffer = [0; 1024 * 2];
stream.read(&mut buffer).unwrap();
let header = String::from_utf8_lossy(&buffer[..]);

没学过web编程,单纯是个人爱好,编写了个小工具,可能犯了啥常识性错误?另外,这个是自己给自己提供服务,所以也用不到什么warp或者actix-web了,所以有什么办法可以尽量使用std库解决这个问题么,求教!

评论区

写评论
作者 eweca-d 2021-04-28 16:15

得救了,使用了percent_encodingpercent_decode(&buffer[..]).decode_utf8().unwrap()代替了String::from_utf8_lossy(&buffer[..])

--
👇
w: 这个不是乱码了,是进行了url转码。楼主可以在网上搜个在线转码的看下和提交的是否一致。

作者 eweca-d 2021-04-28 16:14

原来如此,我看官方书直接就string_from_utf8了。。无语

--
👇
7sDream: https://zh.wikipedia.org/wiki/%E7%99%BE%E5%88%86%E5%8F%B7%E7%BC%96%E7%A0%81

w 2021-04-28 14:57

这个不是乱码了,是进行了url转码。楼主可以在网上搜个在线转码的看下和提交的是否一致。

7sDream 2021-04-28 14:52

https://zh.wikipedia.org/wiki/%E7%99%BE%E5%88%86%E5%8F%B7%E7%BC%96%E7%A0%81

1 共 4 条评论, 1 页