Typescript JSON.parse土耳其语字符转换问题[重复]

deyfvvtc  于 2022-12-27  发布在  TypeScript
关注(0)|答案(1)|浏览(144)
    • 此问题在此处已有答案**:

Using Javascript's atob to decode base64 doesn't properly decode utf-8 strings(12个答案)
19小时前关门了。
我有一段代码可以解码JWT标记,拆分包含声明的字符串部分,并将该信息转换为JSON对象。
第一个月
它工作,但当涉及到用户名,因为它有一些土耳其字符,我得到了一个字符串与不可读的字符。用户名是"Uğur Gül"在下面的图片。

我想我应该以某种方式解析utf-8格式,但找不到如何做到这一点。我正在使用Angular 框架。我该如何解决这个问题?
Edit: Here is a decoded version of my mock-data token on jwt.io. I'm trying to get the payload from token like the way jwt.io creates an JSON object, and I'm assigning needed values to related fields to an instance of LoggedInUser class.

w8f9ii69

w8f9ii691#

一种方法是在后端/前端使用escapeunescape名称。我不知道你的应用程序是如何工作的。
我们使用escapeUğur Gül将被转换为U%u011Fur%20G%FCl。将其设置为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));
  }

重要
escapeunescape标记为已弃用。您可以改用encodeURIdecodeURI

console.log(encodeURI('Uğur Gül'));
    console.log(decodeURI(encodeURI('Uğur Gül')));

Here是一个堆栈 lightning 战发挥。

相关问题