Encoding &引用’&引用;在页面上显示而不是“显示”'&引用;

Encoding &引用’&引用;在页面上显示而不是“显示”'&引用;,encoding,utf-8,mojibake,Encoding,Utf 8,Mojibake,™显示在我的页面上,而不是” 我在我的标记和我的HTTP头中将内容类型设置为UTF-8: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 此外,我的浏览器设置为Unicode(UTF-8):

显示在我的页面上,而不是

我在我的
标记和我的HTTP头中将
内容类型设置为
UTF-8

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

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


那么问题出在哪里?我如何解决它?

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


或使用

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

如果这是文件中的数据,请确保该文件正确编码为UTF-8。您通常可以在所选编辑器的“另存为…”对话框中进行设置

如果在源文件中查看数据时数据已经被破坏,那么很有可能它以前是UTF-8文件,但在此过程中以错误的编码保存

那么问题是什么呢

它是一个
(-U+2019)字符,被解码为而不是。如果查看该表,则会看到该字符是UTF-8格式,由字节
0xE2
0x80
0x99
组成。如果您选中,那么您将看到这些字节中的每一个都代表单个字符


我怎样才能修好它

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


在我的
标记和HTTP头中,我都将内容类型设置为UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
如果您的表已经是UTF-8,那么您需要后退一步。是谁或什么把数据放在那里的。这就是问题所在。一个例子是HTML表单提交的值被错误地编码/解码


以下是了解有关该问题的更多链接:

  • ,来自我们自己的乔
  • ,具有更简洁和实用的信息,解决方案针对Java环境
  • ,针对PHP环境

您的字符编码不匹配;您的字符串以一种编码(UTF-8)进行编码,任何解释此页面的内容都使用另一种编码(比如ASCII)

始终在http头中指定编码,并确保这与框架的编码定义相匹配

示例http头:

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



同样的事情也发生在我身上,'-'字符(长减号)。
我使用了这个简单的替换,所以解决它:

htmlText = htmlText.Replace('–', '-');

我有一些文档,
..
显示为
ê
显示为
Ã
。这就是它是如何到达那里的(python代码):

Adam使用windows-1252编辑原始文件 windows='\x85\xea' #即水平省略号,带扬抑符的拉丁文小写字母E #Beth将其正确读取为windows-1252,并将其写入utf-8 utf8=windows.解码(“windows-1252”).编码(“utf-8”) 打印(utf8) #Charlie在windows-1252编写twingled utf-8版本时读错了 twingled=utf8。解码(“windows-1252”)。编码(“utf-8”) 打印(闪烁) #通过读utf-8和写windows-1252(实际上是utf-8)来绕行 detwingled=twingled.解码(“utf-8”).编码(“windows-1252”) 断言utf8==detwingled
为了解决这个问题,我使用了如下python代码:

以open(“dirty.html”、“rb”)作为f的
:
dt=f.read()
ct=dt.解码(“utf8”).编码(“windows-1252”)
以open(“clean.html”、“wb”)作为g:
g、 写入(ct)
(因为有人将twingled版本插入到正确的UTF-8文档中,所以我实际上只需要提取twingled部分,将其解缠绕,然后重新插入。为此,我使用了BeautifulSoup。)

与web服务器配置错误相比,您更有可能在内容创建方面遇到麻烦。您还可以通过为utf-8文档选择windows-1252编码来强制web浏览器闪烁页面。您的web浏览器无法删除Charlie保存的文档

注意:任何其他单字节代码页(如latin-1)而不是windows-1252都可能出现同样的问题。

(Unicode代码点
U+2019右单引号
)在UTF-8中编码为字节:

0xE2 0x80 0x99

(Unicode代码点
U+00E2 U+20AC U+2122
)以UTF-8格式编码为字节:

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

这些是您的浏览器为了生成
而实际接收的字节™当作为UTF-8处理时

这意味着您的源数据在发送到浏览器之前要经过两次字符集转换:

  • 字符(
    U+2019
    )首先编码为UTF-8字节:

    0xE2 0x80 0x99

  • 然后,这些单独的字节被一个Windows-125X字符集(1252、1254、1256和1258都映射到
    0xE2 0x80 0x99
    U+00E2 U+20AC U+2122
    )错误地解释和解码为Unicode码点,然后这些码点被编码为UTF-8字节:

    0xE2
    ->
    U+00E2
    ->
    0xC3 0xA2

    0x80
    ->
    U+20AC
    ->
    0xE2 0x82 0xAC

    0x99
    ->
    U+2122
    ->
    0xE2 0x84 0xA2


  • 您需要找到执行步骤2中额外转换的位置并将其删除。

    您必须从Word文档中复制/粘贴文本。Word文档使用智能引号。您可以将其替换为特殊字符(&rsquo;),或者只需键入您的HT
    define('DB_CHARSET', 'utf8mb4');
    
    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);
    
    mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’
    
    –
    
    –