【问题标题】:How do I print roman languages (e.g. Spanish) /special characters in Javascript?如何在 Javascript 中打印罗马语言(例如西班牙语)/特殊字符?
【发布时间】:2015-05-18 08:13:28
【问题描述】:

我做了一些研究,发现我们使用 encodeURI(component)decodeURI 来编码特殊字符。

但是当我尝试做类似的事情时:

var my_special_char = 'ñ';
my_div.innerHTML = decodeURI(encodeURI(my_special_char))

打印一个“问号”。

我发现这张(不完整的)关于特殊字符的表格:http://www.javascripter.net/faq/accentedcharacters.htm

当我这样做时有效

decodeURI("%C3%B1"); // ñ

它打印 ñ

但如果我尝试:

decodeURI(encodeURI('ñ'))

我仍然得到一个“问号”。

字符编码在 JS 中是如何工作的?我在哪里可以找到真正全面的 encodeURI 格式的特殊字符(开箱即用,可以通过 decodeURI 解码)?

编辑

  • 在我的(应用程序是 AngularJS 应用程序)中,我有 meta charset=utf-8(以答案中提出的正确 HTML 语法编写,它实际上来自 AngularJS 的启动项目)
  • 我正在使用 WebStorm IDE:我检查了设置,使用的编码是 UTF-8
  • 我在 Apache (XAMPP) 中本地提供页面

编辑 2: 按照答案中的建议,我在 /htdocs 中创建了一个 .htaccess 文件,其内容是:

AddDefaultCharset UTF-8

以及通过在 .html 文件扩展名之前添加 .utf8 来重命名 index.html 和视图文件。

然后我重新启动了 Apache(从 XAMPP 控制台)。

但问题并没有消失。有什么线索吗?

EDIT 3:我终于尝试在 Sublime Text 3 中打开文件并保存为 UTF-8 文件,没有任何变化

【问题讨论】:

  • 您是在文本编辑器中执行此操作吗?如果是这样,请检查您的文件是如何编码的。
  • 你的 JS 代码是在 JS 文件中还是在 HTML 文件中?你自己上菜吗?

标签: javascript character-encoding


【解决方案1】:

您不必在 JS 字符串中进行任何特殊编码(除了可能被视为脚本元素关闭的字符串的特殊情况)。

如果您的 JS 文件编码与 HTTP 标头(最常见的是 UTF-8)匹配,那么如果您这样做,它就会被解码

var my_special_char = 'ñ';
my_div.innerHTML = my_special_char;

为了帮助浏览器,并假设您正确地使用相关 HTTP 标头提供文件(其设置方式高度取决于您的服务器),您应该在 HTML 标头中包含此元标记:

<meta charset='utf-8'>

如果您的脚本在单独的文件中,您还应该在脚本元素中声明编码:

<script charset="UTF-8" src="yourFile.js"></script>

【讨论】:

  • 实际上我在 中使用了 。但是我仍然得到一个“?”。这可能取决于实际字符是在 AngularJS 表达式中打印的事实
  • @dragonmnl 在浏览器中查看源文件是否正常?
  • 其实不是。例如法语(而不是法语)。该值只是从一个对象中获取的,例如:{ id: 5, selectedLanguage: 'Français', languageId: 'fr', selected:false}
  • @dragonmnl 那么您可能在服务器端遇到问题,这意味着您没有提供正确的 http 标头。或者您的文件可能编码错误。在你的文本编辑器中检查。
  • 我只是在本地运行 Apache (XAMPP)。有什么想法吗?
【解决方案2】:

您应该在 head 标记中添加 &lt;meta charset="utf-8" /&gt;。这样浏览器就知道要使用哪个字符集,并且不会再出现问号了:)

【讨论】:

    【解决方案3】:

    在经典记事本中通过点击解决

    文件 > 另存为 > 在编码下拉菜单中 > UTF-8

    在记事本++中点击

    编码 > UTF-8 编码

    或通过将字符集属性添加到元标记charset='utf-8'

    <meta charset='utf-8'>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2012-07-08
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多