’ 在我的页面上显示而不是 '.

我有 Content-Type 调成 UTF-8 在我的两个 <head> 标签和我的HTTP标题:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

enter image description here

此外,我的浏览器设置为 Unicode (UTF-8):

enter image description here

那么问题是什么,我该如何解决呢?

有帮助吗?

解决方案

确保浏览器和编辑器使用UTF-8编码,而不是ISO-8859-1/Windows-1252。

或使用 &rsquo;.

其他提示

所以有什么问题,

它是 (RIGHT SINGLE QUOTATION MARK -U+2019)字符已编码为 CP-1252 代替 UTF-8. 。如果您检查 编码 表,然后您看到此字符在由字节组成的UTF-8中 0xE2, 0x800x99. 。如果您检查 CP-1252代码页布局, ,然后您会看到每个字节代表单个字符 â, .


我该如何解决?

使用UTF-8而不是CP-1252来读取,编写,存储和显示字符。


我将内容类型设置为UTF-8 <head> 标签和我的HTTP标题:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

这仅指示用于解释和显示字符的编码的客户端。这不指示您自己的程序编码用于读取,写入,存储和显示字符的程序。确切的答案取决于服务器端平台 /数据库 /编程语言所使用的。请注意,HTTP响应标头中的一组比HTML Meta标签优先。仅当从本地磁盘文件系统而不是从HTTP打开页面时,才会使用HTML META标签。


此外,我的浏览器设置为 Unicode (UTF-8):

这仅迫使用来解释和显示字符的客户的客户端。但是实际的问题是您已经发送了 ’ (在UTF-8中编码)向客户端而不是 . 。客户端正确显示 ’ 使用UTF-8编码。如果客户被误导使用,例如ISO-8859-1,您可能已经看到了 ââ¬â¢ 反而。


我正在与数据库一起使用ASP.NET 2.0。

这很可能是您的问题所在。您需要使用独立的数据库工具验证数据的外观。

如果是 字符在那里,然后您无法正确连接到数据库。您需要告诉数据库连接器使用UTF-8。

如果您的数据库包含 ’, ,然后是您的数据库搞砸了。表可能没有配置为使用表 UTF-8. 。相反,他们使用数据库的默认编码,该编码因配置而异。如果这是您的问题,那么通常只是更改表以使用UTF-8就足够了。如果您的数据库不支持这一点,则需要重新创建表。当您创建表时,最好设置表的编码。

您最有可能使用SQL Server,但这是一些MySQL代码(从 本文):

CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;

但是,如果您的表格已经是UTF-8,则需要退后一步。 或者 什么 将数据放在那里。 那是 问题在哪里。一个示例是HTML表格提交的值,这些值未正确编码/解码。


这里还有更多链接以了解有关问题的更多信息:

我有一些文件 显示为 …ê 显示为 ê. 。这就是它到达那里的方式(Python代码):

# Adam edits original file using windows-1252
windows = '\x85\xea' 
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX

# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)

# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)

# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")

assert utf8==detwingled

为了解决该问题,我使用了这样的Python代码:

with open("dirty.html","rb") as f:
    dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
    g.write(ct)

(因为有人将Twingled版本插入了正确的UTF-8文档中,所以我实际上只需要提取twingled零件,detwingle并将其插入。我为此使用了美丽的套件。)

您在内容创建中拥有Charlie的可能性要比Web服务器配置错误的可能性更大。您还可以通过为UTF-8文档选择Windows-1252编码Windows-1252来强制Web浏览器扭转页面。您的Web浏览器无法确定查理保存的文档。

笔记: :任何其他单字节代码页(例如Latin-1)而不是Windows-1252可能会发生相同的问题。

(Unicode Codepoint U+2019 RIGHT SINGLE QUOTATION MARK)在UTF-8中编码为字节:

0xE2 0x80 0x99.

’ (Unicode Codepoints U+00E2 U+20AC U+2122)在UTF-8中编码为字节:

0xC3 0xA2   0xE2 0x82 0xAC   0xE2 0x84 0xA2.

这些是您的浏览器实际收到的字节以生产 ’ 当作为UTF-8处理时。

这意味着您的源数据正在通过 在发送到浏览器之前,Charset转换:

  1. 来源 特点 (U+2019)首先编码为UTF-8字节:

    0xE2 0x80 0x99

  2. 那些个体字节是 错误解释 并解码为Unicode Codepoint U+00E2 U+20AC U+2122 由其中之一 Windows-125X charsets(1252、1254、1256和1258所有地图 0xE2 0x80 0x99U+00E2 U+20AC U+2122),然后将这些编码点编码为UTF-8字节:

    0xE2 -> U+00E2 -> 0xC3 0xA2
    0x80 -> U+20AC -> 0xE2 0x82 0xAC
    0x99 -> U+2122 -> 0xE2 0x84 0xA2

您需要找到步骤2中的额外转换并删除。

您的角色编码不匹配;您的字符串编码在一个编码(UTF-8)中,而解释此页面的任何内容都使用另一个(例如ASCII)。

始终在HTTP标头中指定您的编码,并确保与框架的编码定义匹配。

示例HTTP标头:

Content-Type    text/html; charset=utf-8

设置在ASP.NET中编码

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

设置在JSP中编码

当字符串转换时,有时会发生这种情况 从Windows-1252到UTF-8 两次.

我们在zend/php/mysql应用程序中使用了此功能,其中类似字符出现在数据库中,这可能是由于MySQL连接未指定正确的字符集。我们不得不:

  1. 确保Zend和PHP与UTF-8中的数据库进行通信(WAS 不是 默认)

  2. 用这样的几个SQL查询来修复破碎的字符...

    UPDATE MyTable SET 
    MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
    MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
    

    对于必要的尽可能多的表/列来执行此操作。

如有必要,您还可以将其中一些字符串修复在PHP中。请注意,由于字符已编码 两次, ,我们实际上需要进行反向转换 UTF-8回到Windows-1252,这首先使我感到困惑。

mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’

如果您的内容类型已经是UTF8,那么数据可能已经到达错误的编码了。如果要从数据库中获取数据,请确保数据库连接使用UTF-8。

如果这是文件中的数据,请确保将文件正确编码为UTF-8。您通常可以在选择编辑器的“ AS ... AS ...”对话框中设置此此设置。

如果您在源文件中查看数据时已经破坏了数据,则可能是它曾经是UTF-8文件,但在途中的某个地方保存了错误的编码。

如果有人在WordPress网站上遇到此错误,则需要更改WP-Config DB Charset:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

代替:

define('DB_CHARSET', 'utf8mb4');

您必须从Word文档中拥有复制/粘贴文本。 Word文档使用智能报价。您可以用特殊字符(')替换它,也可以简单地输入HTML编辑器(')。

我确定这将解决您的问题。

我的“ - ”角色(长符号)发生了同样的事情。
我使用了这个简单的替换,因此解决了:

htmlText = htmlText.Replace('–', '-');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top