"'" 和 "'" 和有什么不一样?

What is the difference between " ’ " and " ' "

出于某种原因,Redcarpet markdown 将 ' 呈现为 ',而将 呈现为 。有两种类型的单引号吗?为什么 Redcarpet 会区别对待其中一个。 (Ascii table 似乎有一个,但在 unicode 下我假设还有更多?)

搜索'有点困难以及chrome的find(command + f)和Google搜索似乎把这两个角色是一样的。

是的,有。这两个引号字符是:

hex(decimal) codepoint = 2019(8217) and character = ’
hex(decimal) codepoint = 27(39) and character = '

code-points(第一个数字是十六进制,第二个是 code-point 的十进制值)是不同的。

根据Unicode标准,第一个是:

2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;

而第二个是

0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;

也许 RedCarpet 应该使用适当的 HTML 实体转义作为第一种引号。 (This page 说应该转义为 ’

当您说第二个引号: ' 是 7 位 ASCII 编码的一部分时,您是对的。

即使呈现为:' 的第一个引号 ’ 与第二个引号:' 在人眼中难以区分,您也可以在 Chrome 或任何其他 editor/browser 使用操作系统的输入法。这是因为输入字符是所谓的 Input Method 的工作,如果您知道操作系统支持的输入法,则可以在给定的操作系统中输入任何字符。例如,在 Mac:

  • 在菜单栏上使用如下所示的 U+ 键盘。
  • 在 Chrome 上按 Cmd + F 开始搜索。
  • 按住 Alt 键并输入您要查找的报价 (2719) 的 unicode 十六进制值。将出现在搜索框中的是 ’(事实上,这就是我打印那句话所做的!)

Linux 和 Microsoft Windows 上提供了类似的工具。

//Here is the C# way to handle in programme
// example for removing apostrophe from O’Reilly
char charToRemove = '\''; // works in android and windows
char charToRemove1 = (char)8217; // works in iOS/macOS
string myName = "O’Reilly";

myName = myName.Replace(charsToRemove.ToString(), "");  // Android windows
myName = myName.Replace(charToRemove1.ToString(), "");  // ios


Console.Writeline(myName);