“’”显示网页,而不是“搞”“’”显示网页,而不是“搞”(“’” showing on

2019-05-09 06:57发布

’是显示我的网页,而不是在'

我有Content-Type设置为UTF-8在我的两个<head>标记和我的HTTP头:

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

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

那么,有什么问题,我怎么能解决这个问题?

Answer 1:

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

或者使用&rsquo;



Answer 2:

所以有什么问题,

这是一个'RIGHT SINGLE QUOTATION MARK - U + 2019),其已被编码为字符CP-1252代替的UTF-8 。 如果您检查编码表,那么你看到的这个人物是UTF-8字节组成0xE20x800x99 。 如果您检查CP-1252编码的页面布局 ,然后你会看到每个这些字节代表单个字符â


我该如何解决?

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


我有内容类型设置为我的两个UTF-8 <head>标签,我的HTTP头:

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

这仅指示客户端使用来解释和显示字符,其编码。 这不指示自己的程序中使用的读,写,存储和显示的字符,编码,精确的答案取决于所使用的服务器端平台/数据库/编程语言。 请注意,在HTTP响应报头中的一组具有优先于HTML元标记。 当页面从本地磁盘文件系统,而不是从HTTP打开HTML meta标签只会被使用。


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

这只强制客户端用来解释和显示的字符,编码。 但实际的问题是,你已经发送’ (以UTF-8编码)到客户端,而不是' 。 客户端被正确地显示’使用UTF-8编码。 如果客户端misinstructed使用,例如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表单提交的值。


这里有一些更多的联系,以了解更多有关该问题:

  • 绝对最低每一个软件开发人员绝对,积极必须知道的关于Unicode和字符集(没有借口!) ,从我们自己的乔尔。
  • Unicode的-如何让人物吧? ,以更简洁和实用信息,解决方案是针对在Java环境。
  • 如何设置PHP站点使用UTF8 ,有针对性的PHP环境。


Answer 3:

我有一些文件,其中被显示为…ê被显示为ê 。 这是如何到达那里(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并装入回。我用BeautifulSoup这一点。)

这是更有可能的是,你在内容创作比Web服务器配置是错误的有查理。 您还可以强制Web浏览器选择窗口-1252编码为UTF-8文件twingle页面。 您的浏览器不能detwingle查理保存文档。

:可以与任何其他的单字节代码页发生同样的问题(如Latin-1的)而不是Windows 1252的。



Answer 4:

' (统一代码点U+2019 RIGHT SINGLE QUOTATION MARK )以UTF-8编码为字节:

0xE2 0x80 0x99

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

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

这是您的浏览器实际接收以产生字节’当为UTF-8进行处理。

这意味着,源数据被发送到浏览器之前通过两个字符集转换会:

  1. '字符( U+2019 )首先被编码为UTF-8字节:

    0xE2 0x80 0x99

  2. 那些个别字节然后被误解释和解码以Unicode代码点U+00E2 U+20AC U+2122Windows-125X字符集的一个(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中的额外的转换,并将其删除。



Answer 5:

您的字符编码不匹配; 您的字符串是在一个编码(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中设置的编码



Answer 6:

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

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

如果在源文件中查看数据已经坏了,有机会,它曾经是一个UTF-8的文件,但在前进的道路上某处保存在错误的编码。



Answer 7:

当字符串是从Windows的1252转换为UTF-8 两次此有时会发生。

我们在一个Zend / PHP / MySQL的应用程序有这个在那里同样的字符在数据库中出现,可能是由于不指定正确的字符集的MySQL连接。 我们不得不:

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

  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 ’


Answer 8:

如果有人得到WordPress的网站这个错误,您需要更改WP-DB配置字符集:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

代替:

define('DB_CHARSET', 'utf8mb4');


Answer 9:

您必须从Word文档复制/粘贴文本。 Word文档使用智能引号。 您可以使用特殊字符替换(&rsquo的;)或只需键入HTML编辑器(')。

我敢肯定,这将解决您的问题。



Answer 10:

同样的事情发生在我身上用“ - ”字符(长减号)。
我用这个简单的更换,从而解决这个问题:

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


Answer 11:

相反英镑符号的我用:&磅; 没有空间。 这解决了这个问题对我来说。

对于欧元:欧元&; 没有空间。



文章来源: “’” showing on page instead of “ ' ”