为什么这个字符 returns 的 ASCII 表示为 226 128 153?

Why is ASCII representation of this character returns as 226 128 153?

所以我正在玩这个工具:

http://www.unit-conversion.info/texttools/ascii/

当我尝试这个角色时:

'

我看到值 039 可以从以下位置验证:http://www.asciitable.com

但我很好奇:

这个字符在同一个工具中会return:226 128 153

但据我所知 ASCII 是 8 位(甚至 7 位...)

这里的226 128 153是什么?

好像是UTF16表示。可能该网站正在将字符转换为 "’".charCodeAt(0); in Javascript

中的代码表示

第一个字符为ASCII,编码39。第二个为UNICODE字符,编码8217。

参见UNICODE character table, specifically for this character

有关详细信息,请阅读 UNICODE 文章。

$(document).ready(function(){
  $('#res').html("’".charCodeAt(0));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='res'><div>

您的字符是 U+2019 RIGHT SINGLE QUOTATION MARK,这也是在大多数位置上表示撇号的正确印刷方式。

该站点所做的是表示 UTF-8 中的字符。正如您在我链接的页面中看到的那样,该字符被编码为三个字节,十六进制为 0xE2 0x80 0x99,十进制为 226 128 153

该页面使用 UTF-8 而不是 ASCII 的原因是什么?简单的。首先,ASCII 是 UTF-8 的一个子集。其次,UTF-8支持整个Unicode。因此,如果可以使用 UTF-8 代替,则很少有理由使用 ASCII。

我遇到了同样的问题(尝试将字符串实际转换为大写,运行 转换为该字符,它 'broke' 一堆将具有特殊字符的字符串转换为大写的方法。

我使用了这个解决方案:

    $text = preg_replace("/[`‛′’‘]/u", "'", $text);

(不是我的 - 取自此处:)

然后将其转换为常规逗号,您可以对其执行正常的 php 功能。