【问题标题】:Converting MS word "curly" quotes and apostrophes转换 MS 单词“卷曲”引号和撇号
【发布时间】:2011-02-19 01:13:02
【问题描述】:

如何将 MS Word 引号和撇号转换为 Java 中的常规引号和撇号字符?这些字符的 unicode 编号是多少?

“你好吗?”

‘你好’

由于 Stack Overflow 会自动修复它们,因此它们在编辑器中的显示方式如下

“你好吗?”

'你好'

【问题讨论】:

  • 这里没有转换,“智能引号”很好。 StackOverflow 将问题标题中的直引号转换为“”(有争议),但保留问题文本。
  • 顺便说一句,真的有充分的理由用直引号代替它们吗?它们不是特殊的“MS Word”字符,它们是完全有效的 Unicode 字符,通常应该由任何可以处理 Unicode 的应用程序很好地处理。
  • @bobince 并非所有应用程序都能正确处理 unicode,但人们通常会粘贴他们用 ms-word 编写的文本,并且能够保留引号(通过将它们转换为常规引号)而不是剥离它们完全消失了。

标签: ms-word quotes


【解决方案1】:

离开托马斯的答案,代码是:

return text.replaceAll("[\\u2018\\u2019]", "'")
           .replaceAll("[\\u201C\\u201D]", "\"");

【讨论】:

    【解决方案2】:

    这里有一个对所有处理 Unicode 的人都非常有用的链接:Unicode codepoint lookup/search tool

    搜索“引号”给出

    ‘ (U+2018) LEFT SINGLE QUOTATION MARK
    ’ (U+2019) RIGHT SINGLE QUOTATION MARK
    “ (U+201C) LEFT DOUBLE QUOTATION MARK
    ” (U+201D) RIGHT DOUBLE QUOTATION MARK
    

    您可以考虑替换 several other quote-like symbols

    【讨论】:

      【解决方案3】:

      感谢 Nick van Esch,C# How to replace Microsoft's Smart Quotes with straight quotation marks?

      这是代码('\u2019' 在 MS Word 中是 '),它很有用,因为它涵盖了有问题的单词字符。

      if (buffer.IndexOf('\u2013') > -1) buffer = buffer.Replace('\u2013', '-');
      if (buffer.IndexOf('\u2014') > -1) buffer = buffer.Replace('\u2014', '-');
      if (buffer.IndexOf('\u2015') > -1) buffer = buffer.Replace('\u2015', '-');
      if (buffer.IndexOf('\u2017') > -1) buffer = buffer.Replace('\u2017', '_');
      if (buffer.IndexOf('\u2018') > -1) buffer = buffer.Replace('\u2018', '\'');
      if (buffer.IndexOf('\u2019') > -1) buffer = buffer.Replace('\u2019', '\'');
      if (buffer.IndexOf('\u201a') > -1) buffer = buffer.Replace('\u201a', ',');
      if (buffer.IndexOf('\u201b') > -1) buffer = buffer.Replace('\u201b', '\'');
      if (buffer.IndexOf('\u201c') > -1) buffer = buffer.Replace('\u201c', '\"');
      if (buffer.IndexOf('\u201d') > -1) buffer = buffer.Replace('\u201d', '\"');
      if (buffer.IndexOf('\u201e') > -1) buffer = buffer.Replace('\u201e', '\"');
      if (buffer.IndexOf('\u2026') > -1) buffer = buffer.Replace("\u2026", "...");
      if (buffer.IndexOf('\u2032') > -1) buffer = buffer.Replace('\u2032', '\'');
      if (buffer.IndexOf('\u2033') > -1) buffer = buffer.Replace('\u2033', '\"');
      

      【讨论】:

      • 在上面的答案中,我们提到了所有 MS Word 引号。没有任何简单的代码可以用直引号替换所有 MS Word 引号吗?我的意思是,我们如何列出所有 MS Word 引号?
      • @Anish Mittal:据我所知,这是最简单的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多