【问题标题】:Weird Char in String [duplicate]字符串中的奇怪字符[重复]
【发布时间】:2019-11-20 00:47:57
【问题描述】:

我打了一个服务电话,我得到了这个字符串"lastName":"Düsedau"

正如您所见,这很奇怪,但如果您将其转换为 UTF-8,则它是正确的。 https://encoder.mattiasgeniar.be/index.php

问题在于,在 UI 中,即使我有 charset utf-8,也会出现奇怪的字符

<meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 <meta name="description" content="'moduleApp'" />
    <meta name="viewport" content="width=device-width" />

我的服务:

promises.People.$promise.then(function(data) {
        this.people = data.People; // JSON that has lastname
    });

如何从 json 中删除这些奇怪的字符? 我使用 AngularJS

【问题讨论】:

  • 服务器没有发送 UTF8
  • 如果你控制了源...修复它。
  • @mplungjan 让我们假设不可能改变它。我可以修复 UI 吗?
  • 您的服务器说它发送 UTF-8 (Content-Type: text/html; charset=UTF-8)。保存文件时使用 UTF-8 编码。
  • @user11341081 当然,您可以解析字符串并将 UTF-8 多字节解码为正确的字符......但认真吗?修复源。文件的编码是否错误或服务器没有在Content-Type 标头中包含字符集,请修复它!不要乱用损坏的数据。

标签: javascript


【解决方案1】:

ü(如0xC3 0xBC)是mojibake for ü,又名U+00FC 'LATIN SMALL LETTER U WITH DIAERESIS'。当您将其编码为 UTF-8 并将其解析/呈现为某些单字节编码(例如 ISO-8859-1Windows-1252)时,您会获得它,其中 0xC3 代表 U+00C3 'LATIN CAPITAL LETTER A WITH TILDE'0xBC 代表 U+00BC 'VULGAR FRACTION ONE QUARTER'。这表明数据最初以 UTF-8 格式存储,并在上游某处被误解。

您可以进行的第一个检查是打开浏览器的开发工具并检查服务器的响应,同时考虑到有效的 JSON 只能编码为 UTF-8。从那里继续前进。

【讨论】:

    【解决方案2】:

    也许你应该试试这个

    &lt;meta contentType="text/html; charset=UTF-8"/&gt;

    【讨论】:

    • 不起作用...
    【解决方案3】:

    如果您绝对无法修复服务器,您可以这样做

    console.log(decodeURIComponent(escape(`"lastName":"Düsedau"`)))

    或者让代理读取拉丁文并在将其发送到您的客户端之前将其重新编码为 UTF8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2021-12-13
      • 2018-07-27
      • 2016-06-13
      • 1970-01-01
      • 2021-11-19
      • 2021-04-23
      相关资源
      最近更新 更多