提问人:emreertunc 提问时间:12/26/2022 最后编辑:emreertunc 更新时间:12/26/2022 访问量:222
Typescript JSON.parse 土耳其语字符转换问题 [重复]
Typescript JSON.parse turkish character conversion problem [duplicate]
问:
我有一个代码,可以解码 JWT 令牌,拆分包含声明的字符串部分并将该信息转换为 JSON 对象。
return JSON.parse(atob(token.split('.')[1])) as LoggedInUser;
它有效,但是当涉及到用户名时,由于它有一些土耳其字符,我得到一个带有不可读字符的字符串。在下图中,用户名为“Uğur Gül”。
我想我应该以某种方式使用 utf-8 格式进行解析,但找不到方法。我正在使用 angular 框架。如何解决此问题?
编辑:这是我在 jwt.io 上的模拟数据令牌的解码版本。我正在尝试从令牌中获取有效负载,就像 jwt.io 创建 JSON 对象的方式一样,并且我正在将所需值分配给 LoggedInUser 类的实例的相关字段。
答:
-2赞
Flo
12/26/2022
#1
一种方法是后端/前端的名称。我不知道你的应用程序是如何工作的。escape
unescape
我们使用 和 Uğur Gül 将转换为 U%u011Fur%20G%FCl。将此项设置为 ,创建令牌并将其发送到前端。前端对其进行解码,给出名称并调用.所以你又有了正确的名字。escape
GivenUserName
unescape
样本:
data = '{"UserId":"2","UserGivenName":"U%u011Fur%20G%FCl","http://schemas.microsoft.com/ws/2008/06/identity/claims/role":"2","exp":1672046375,"iss":"https://localhost:7013/","aud":"https://localhost:7013/"}'
constructor() {
console.log((escape("Uğur Gül")));
console.log(unescape(escape("Uğur Gül")))
this.token = (btoa(this.data))
const jsonData = JSON.parse(atob(this.token));
console.log(unescape(jsonData.UserGivenName));
}
重要
escape
并标记为已弃用。您可以使用 and:unescape
encodeURI
decodeURI
console.log(encodeURI('Uğur Gül'));
console.log(decodeURI(encodeURI('Uğur Gül')));
这是一个 Stackblitz 可以玩。
评论
0赞
deceze
12/26/2022
这不仅不应该是必需的,而且还在不应使用的已弃用函数列表中。escape
0赞
Flo
12/26/2022
查看更新后的帖子
0赞
deceze
12/26/2022
更好,但是如果您需要处理的第三方为您提供 UTF-8 编码的字符串,它仍然不起作用。
0赞
Flo
12/26/2022
然后我们需要查看后端代码,它对字符串进行编码。没有它,这是一个可行的解决方案。
1赞
deceze
12/26/2022
如示例中所述,后端提供了一个完美的 UTF-8 编码的 JWT。这是 JS 中一个已知的“问题”,即将包含 UTF-8 编码文本的 base64 解码为字符串是......棘手。我把这个问题作为重复...
评论