"’" 显示在页面上而不是“”

2024-04-26 05:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的<head>标记和HTTP头中的Content-Type都设置为UTF-8

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

enter image description here

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

enter image description here

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


Tags: text标记httphtmltype浏览器页面content
3条回答

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

或者使用&rsquo;

我有一些文档,其中显示为…ê显示为ê。这就是它的实现方式(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)

(因为有人在一个正确的UTF-8文档中插入了twingled版本,所以我实际上只需要提取twingled部分,取消twingle并将其插入。我用美容师来做这个。)

与web服务器配置错误相比,在内容创建方面更有可能出现Charlie。还可以通过为utf-8文档选择windows-1252编码来强制web浏览器扭曲页面。您的web浏览器无法检测Charlie保存的文档。

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

So what's the problem,

它是一个^{}-U+2019)字符,编码为CP-1252,而不是UTF-8。如果您检查encodings表,就会看到这个字符是由字节0xE20x800x99组成的UTF-8。如果您检查CP-1252 code page layout,那么您将看到这些字节中的每一个代表单个字符â


and how can I fix it?

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


I have the Content-Type set to UTF-8 in both my <head> tag and my HTTP headers:

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

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


In addition, my browser is set to Unicode (UTF-8):

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


I am using ASP.NET 2.0 with a database.

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

如果存在字符,则说明您没有正确连接到数据库。您需要告诉数据库连接器使用UTF-8。

如果你的数据库包含’,那么就是你的数据库搞砸了。很可能这些表没有配置为使用UTF-8。相反,它们使用数据库的默认编码,这取决于配置。如果这是您的问题,那么通常只修改表以使用UTF-8就足够了。如果数据库不支持,则需要重新创建表。创建表时设置表的编码是一种良好的做法。

您很可能使用的是SQL Server,但这里有一些MySQL代码(从this article复制):

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

如果您的表已经是UTF-8,那么您需要后退一步。谁把数据放在那里。这就是问题所在。一个例子是HTML表单提交的值被错误地编码/解码。


以下是了解此问题的更多链接:

相关问题 更多 >