首页 新闻 会员 周边

vscode 插件出现很奇怪的乱码问题

0
悬赏园豆:100 [已解决问题] 解决于 2023-07-04 22:01

园子的 vscode 插件 出现一个很奇怪的乱码问题,从远程拉取更新时,也就是从通过后台 web api 获取博文内容保存至本地

有时会出现乱码

多次点击远程拉取更新,有时乱码有时正常,乱码会出现在同一个位置。

网页端博客后台与 vscode 插件调用的同一个 web api,却没有出现这个问题。

最最奇怪的是这个问题只在基于 k8s 部署的生产环境出现,如果将服务端切换到基于 docker swarm 部署的 staging 环境,则不会出现这个问题。

问题补充:

乱码字符的 utf-8 编码是 \ufffd (replacement character)

改为下面的代码后,还是会出现乱码,只是换个位置出现

services.AddControllersWithViews()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
    });
<p>不要忘记参与贡献的人作为一个个体应该是���么样的</p>

【7月3日15:25更新】

插件中使用的 HttpClient 组件是 got,github 上发现一个相关 issue https://github.com/sindresorhus/got/issues/1802

dudu的主页 dudu | 高人七级 | 园豆:30943
提问于:2023-06-30 15:58
< >
分享
最佳答案
1

是插件中使用的 HttpClient 组件 got 引起的,最终通过 iconv-lite 解决了

import iconv from 'iconv-lite';

const gotWithBuffer = got.extend({   
    responseType: 'buffer',
});
const body = await gotWithBuffer(`${this._baseUrl}/api/posts/${postId}`).buffer();
const decodedBody = iconv.decode(body, 'utf-8');
const { blogPost, myConfig } = JSON.parse(decodedBody) as { blogPost?: Post; myConfig?: unknown };

解决这个问题的 PR https://github.com/cnblogs/vscode-cnb/pull/150

dudu | 高人七级 |园豆:30943 | 2023-07-03 22:29
其他回答(2)
0

"k8s 部署的生产环境" 多个pod之间有差异?

收获园豆:80
czd890 | 园豆:14412 (专家六级) | 2023-06-30 17:03

应该没有差异,等会晚上试试只使用一个 pod

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-06-30 17:27

@dudu: 可以二进制看看???这里具体是什么东西

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2023-06-30 17:56

@czd890: 从 vscode 中复制过来的乱码字符:���

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-06-30 19:19

@czd890: 是 \ufffd 字符

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-06-30 19:59

使用一个 pod,也是同样的问题

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-06-30 20:22

不好意思,之前弄错了,docker swarm 也会出现乱码,只是乱码出现在不同的位置

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-07-02 18:26

@dudu:
2次请求有任何差异:
例如请求要求的编码不一样, 数据从数据库/cache来,
既然问题能复现, 而且也比较方便. 那就直接粗暴的手段上, 直接改下代码吧所有相关信息全部记录下来. reqeust, respone, 执行过程等.

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2023-07-03 14:02

@czd890: 现在怀疑是插件中使用的 HttpClient https://github.com/sindresorhus/got 引起的,准备换成 https://github.com/matthew-andrews/isomorphic-fetch 试试

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2023-07-03 15:18

@dudu: 如果是因为请求仔服务端和client用的编码不一样,应该要大面积显示乱码,类似于 gb2312/utf8 大面积的昆丁考

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2023-07-03 15:59

在某个地方看到的总结:

支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2023-07-17 12:06
0

乱码问题可能涉及到多个因素,包括编码、字符集、网络传输等。以下是一些可能的原因和解决方法:

字符编码设置:确保你的代码文件、服务器端和客户端之间的字符编码设置一致。推荐使用UTF-8作为字符编码,它支持更广泛的字符范围。

服务器端响应头设置:在服务器端的响应头中,确保正确设置Content-Type头字段,指定正确的字符集,例如Content-Type: text/html; charset=utf-8。

字符编码转换:在数据传输的过程中,可能需要进行字符编码的转换。确保在数据传输的各个环节中,对数据进行正确的编码和解码。可以使用相应的编码库或函数进行转换。

网络传输问题:乱码问题有时可能与网络传输有关。检查网络连接是否稳定,并确保传输的数据没有被截断或损坏。

特殊字符处理:如果乱码字符是Unicode替换字符(\ufffd),可能是因为特殊字符无法正确显示。你可以尝试查看特定位置的字符,并检查其在不同环境中的处理方式。

此外,根据你提供的信息,该问题在不同环境中表现不同,可能与环境设置有关。你可以进一步检查不同部署环境的配置和差异,例如字符编码设置、网络配置等。如果可能,也可以尝试在生产环境中使用其他调试工具或方法,以确定问题的具体原因。

最后,如果问题仍然存在,建议你尝试在相关的开发社区或者插件的GitHub仓库中提问,以获取更专业的帮助和支持。

收获园豆:20
Technologyforgood | 园豆:5686 (大侠五级) | 2023-07-01 23:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册