问题标签 [iso-8859-1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3775 浏览

servlets - Servlet 接收 ISO-8859-1 和 UTF-8 格式的数据。如何进行 URL 解码?

我有一个 Web 应用程序(嗯,实际上只是一个 servlet),它接收来自 3 个不同来源的数据:

  • 源 A 是用 UTF-8 编写的 HTML 文档,并通过<form method="get">.
  • 源 B 是用 ISO-8859-1 编写的,并且<form method="get">也通过 发送数据。
  • 源 C 用 ISO-8859-1 编写,并通过<a href="http://my-servlet-url?param=value&param2=value2&etc">.

servlet 接收请求参数并使用 UTF-8 对它们进行 URL 解码。正如您所料,A 可以正常工作,而 B 和 C 则失败(您无法在 UTF-8 中对以 ISO-8859-1 编码的内容进行 URL 解码......)。

我可以对 B 和 C 稍作修改,但我不能将它们从 ISO-8859-1 更改为 UTF-8,这样可以解决所有问题。

在 B 中,我已经能够通过accept-charset="UTF-8"添加<form>. 因此,即使页面是 ISO,它也会以 UTF-8 格式发送数据。

我能做些什么来修复C?

或者,有没有办法确定 servlet 上的字符集,所以我可以在每种情况下使用正确的编码调用 URL-decode?


编辑:我刚刚找到了这个,这似乎解决了我的问题。我仍然需要进行一些测试以确定它是否会影响性能,但我认为我会坚持使用该解决方案。

0 投票
2 回答
288 浏览

browser - 如果我在 ISO-8859-1 站点上使用 Unicode,浏览器将如何解释它?

所以我得到了一个使用 ISO-8859-1 编码的网站,我无法改变它。我想确保我在网站上输入到 Web 应用程序的内容得到正确解析。解析器逐个字符地工作。我也无法更改解析器,我只是在编写文件供它处理。我告诉应用程序在解析后显示的文件中的内容包含 Unicode 字符(或者至少我假设是这样,即使它们是由映射到 CP437 的 Windows Alt 代码生成的)。由于解析器的逐字符操作,使用实体不是一个选项。解析器在输出时转义的唯一字符是对标记敏感的字符,例如与符号、小于和大于符号。我会继续进行,看看它是什么样子,但输出只能在发布时看到,

所以,长话短说,如果我告诉一个站点在一个带有元标记的站点上输出 ▼ÇÑ¥☺☻ 并声明它应该使用 ISO-8859-1,浏览器会自动检测 Unicode 并显示它还是会它从字面上将其翻译为 ISO-8859-1 并获得一组不同的字符?

更新:我在http://doorstop.csh.rit.edu/home/testing创建了一个临时测试站点,我在 Notepad++ 中使用没有 BOM 的 UTF-8 制作了测试文件,但使用了将编码设置为 ISO 的元标记-8859-1。

0 投票
1 回答
448 浏览

php - š 和其他字符不可见

我对一些捷克字符很着迷。在 DB 上,我用 č (和类似的字符)保存了字符串,只有当我将页面字符集设置为 ISO-8859-1 时,我才能显示这一点。

可能没问题,但是我有一个 UTF-8 XML 文件,当我尝试从这个 xml 中获取一些字符串时,我遇到了一些问题。如果我使用 ISO-8859-1 字符集,基本上来自 XML 的字符串将无法正确显示。xml 是 UTF-8。我试图将 č 和类似的 char 转换为 š 在 xml 上并使用 ISO-8859-1 字符集,但它们不会正确显示。

所以。情况是:

UTF-8 上的 XML 和带有 UTF-8 的 HTML 页面,来自 XML 的字符串正确但来自 DB 的字符串不可见 ISO-8859-1 上的 XML 和带有 UTF-8 的 HTML 页面,来自 XML 的字符串不正确但来自 DB 的字符串正确

我也尝试使用 ICONV 或类似功能转换 XML 字符串,但没有任何反应。

请问你能帮帮我吗?

安德烈亚

0 投票
4 回答
848 浏览

php - ___ 编码为 UTF-8 - 是否有最终解决方案?

我浏览过网络,浏览过 SO,浏览过 PHP 文档等等。

没有标准解决方案似乎是一个荒谬的问题。如果你得到一个未知的字符集,并且它有奇怪的字符(比如英文引号),有没有一种标准的方法可以将它们转换为 UTF-8?

我见过许多使用过多功能和检查的混乱解决方案,但没有一个肯定会起作用。

有没有人提出自己的功能或始终有效的解决方案?


编辑

许多人回答说“它无法解决”或类似的东西。utf8_encode我现在明白了,但是除了非常有限之外,没有人给出任何有效的解决方案。有什么方法可以解决这个问题?最好的方法是什么?

0 投票
2 回答
2471 浏览

mysql - MySQL 复制中的字符集

我能做些什么来确保复制将使用 latin1 而不是 utf-8?

我正在 Linux 系统上的 MySQL 5.1.22 服务器(主)和 FreeBSD 系统上的 MySQL 5.1.42 服务器(从)之间迁移。我的复制效果很好,但是当我的 varchars 中有非 ascii 字符时,它们会变得“奇怪”。Linux/MySQL-5.1.22 显示以下字符集变量:

虽然 FreeBSD 显示

从 MySQL CLI 设置这些变量中的任何一个都没有效果,并且在 my.cnf 或命令行中设置它们会使服务器无法启动。

当然,两台服务器都以相同的方式创建有问题的表,在本例中使用 DEFAULT CHARSET=latin1。让我给你举个例子:

当我在 master 上做时,在 Latin1 终端中,“INSERT INTO test VALUES ('æøå')”,当我从基于 Latin1 的终端中选择它时,这变成了奴隶

在复制从站上基于 UTF-8 的终端上,测试包含:

所以我的结论是它被转换为utf8,即使表定义是latin1。这是一个正确的结论吗?

当然,在 master 上,在 latin1 终端中,它仍然说:

由于两个系统字符集都是 utf-8,如果我将两个终端都设置为 utf-8 并在使用 utf-8 终端的主机上再次使用 utf-8 在从机上执行“INSERT INTO test VALUES ('æøå')”我得到:

如果我的结论是正确的,我所有的复制数据都被转换为 utf8(如果是 utf8,它被视为 latin1 并转换为 utf8),而表中的所有旧数据,正如 CREATE TABLE 建议的那样,都是 latin1。如果不是因为遗留应用程序依赖它是 latin1 的事实,我很乐意将它全部转换为 utf-8,所以我需要在它们仍然存在时将它保留在 latin1 中。

我该怎么做才能确保复制读取 latin1,将其视为 latin1 并将其作为 latin1 写入从属设备?

干杯

尼克

0 投票
2 回答
87555 浏览

java - Java InputStream 编码/字符集

运行以下(示例)代码

给我这个输出

如何在第 9 行打印输出中保留正确的字节值 (-27)?并因此收到System.out.println(s)命令的预期输出 (å)。

0 投票
1 回答
1963 浏览

jquery - jQuery 将 ISO 字符集设置为 ajax 请求

我正在使用 jQuery 向服务器发送 ajax 请求,但我在字符集方面遇到了一些问题。在ajax函数文档中写入数据始终根据 W3C XMLHTTPRequest 标准以 UTF-8 发送,所以我不认为 jQuery 允许您更改请求字符集(除非您加载脚本,但这不是我的案子)。

那么你知道在 jQuery 中为 ajax 请求设置 ISO-8859-1 字符集的方法吗?

0 投票
1 回答
3026 浏览

html - 提交的字符编码——_charset_隐藏字段

对于我们的 Web 应用程序,我们有多个包含文本区域的 HTML 页面。我们所有的页面都使用 ISO-8859-1 字符集呈现。当在 Windows 机器上通过 IE6 访问页面并将“智能引号”等特殊字符复制到文本区域时,我们的某些页面使用 Windows 1252 字符编码提交页面。在其他情况下,页面似乎使用 UTF-8 字符编码提交。我一直在使用以下隐藏字段跟踪提交字符编码:

在 Windows 1252 提交字符编码页面上,我们收到“windows-1252”的值。

在 UTF-8 提交字符编码页面上,我们收到一个空白值。

在后端,我们使用 ISO-8859-1。虽然理想情况下我们希望提交字符编码,但我看不到在 IE 6 上强制执行该行为的选项。鉴于在 Windows 1252 和 UTF-8 之间进行选择,我更希望在 Windows 1252 中提交内容,这样更有可能以在 ISO-8859-1 中重新呈现页面时正确呈现。

我已经深入研究了我们的页面,没有什么让我觉得有些页面以一种字符编码提交的原因。

1) 当 IE 6 返回一个空白字符集时,这实际上是否等同于 UTF-8?当提交字符编码为 UTF-8 时,IE 6 是否总是返回一个空白字符集,或者仅当它无法正确确定要使用的字符编码时?

2) 页面上可能存在哪些差异会导致 IE 6 在某些页面上选择 Windows 1252 而在其他页面上选择 UTF-8?我在页面上扫描了 UTF-8 字符和任何接受字符集属性,但都找不到。

附加说明:我在以下链接中找到了有关字符集隐藏输入的信息。

http://web.archive.org/web/20060427015200/ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html

0 投票
6 回答
38515 浏览

java - jQuery AJAX 调用搞乱了字符编码

我有一个输出 JSON 的 servlet。servlet 的输出编码是 ISO-8859-1。我们 webapp 中的页面也设置为 ISO-8859-1。我会使用 UTF-8,但这不在我的控制范围内;我们必须使用 ISO-8859-1。

当我自己点击 servlet 时,我可以看到已输出的 JSON 数据。字符编码正确,没有一个字符看起来很奇怪。

但是,当我通过 AJAX 调用 servlet 并使用检索到的数据来填充选择框时,我得到 � 代替(似乎)所有有重音的字符(例如,带有重音或重音、分词或抑扬符的 i )。当我查看 Firebug 下 Net 选项卡中的响应时,我可以看到文本看起来不错。但是,当我使用该数据填充选择框时,我得到了带问号的菱形。

这些字符都是有效的 ISO-8859-1 字符,所以我不明白为什么它们不能正确显示。

编辑

更多信息。我使用GETinjQuery.ajax并设置scriptCharsetISO-8859-1. 在服务器端,我已经明确地将编码设置为 ISO-8859-1 使用request.setCharacterEncoding("ISO-8859-1");

编辑

代码示例:

这就是我目前所拥有的。我加scriptCharset: "ISO-8859-1"了没有效果。

我的 servlet 使用org.json.JSONObject并简单地输出字符串response.getWriter().print(jsonObject.toString());

更新

根据关于 JSON 以及它应该如何成为 UTF-8 的评论,我尝试查看是否可以将数据作为文本获取(因此设置dataTypetextin jQuery.ajax),然后我自己将其评估为 JSON(在 Javascript 中)。这似乎也不起作用!当我这样做时console.log,我仍然会得到时髦的钻石。但是,当我在 Firebug 的 Net 选项卡下查看它时,一切正常:

网络选项卡:

但是,当我console.log(text)使用从中得到的东西时jQuery.ajax,我得到以下信息:

在我看来,jQuery 对数据做了一些奇怪的事情。

0 投票
2 回答
13744 浏览

unicode - 如何“强制”文件的 ISO-8859-1ness?

我记得当我曾经在日本开发网站时——那里有三种不同的货币字符编码——开发人员有一个技巧来“强制”源文件的编码,因此它总是在他们的 IDE 中以正确的编码打开。

他们所做的是在文件顶部添加一个注释,其中包含一个仅存在于该特定字符编码中的日文字符 - 它不在其他任何字符中!这非常有效。

我记得这一点,因为现在我有一个类似的,尽管是英语的,问题。

我有一些文件必须是 ISO-8859-1,但在我的编辑器(Linux 上的 Bluefish 1.0.7)中以 UTF-8 格式打开。这通常不是问题,除了英镑 (£) 符号等。不要误会我的意思,我可以修复文件并再次将其另存为 ISO-8859-1,但我希望它在我的编辑器中始终以 ISO-8859-1 格式打开。

那么,是否有任何类型的字符黑客 - 就像我上面提到的 - 来做到这一点?还是有什么其他方法?

PS。Unicode 倡导者/布道者不必浪费时间试图改变我的信仰,因为我已经是他们中的一员了!这是我继承的一个摇摇晃晃的旧系统:-(

聚苯乙烯。请不要说“使用不同的编辑器”,因为我是个老屁并且以我的方式设置:-)