如何将宽字符串转换为ASCII

丹尼尔·沃尔夫

我正在寻找一种将awstring转换为string仅包含ASCII字符的纯文本的方法。ASCII(0-127)中不存在的任何字符都应转换为最接近的ASCII字符。如果没有类似的ASCII字符,则应省略该字符。

为了说明,我们假设以下宽字符串:

wstring text(L"A naïve man called 晨 was having piña colada and crème brûlée.");

我正在寻找的转换版本是这个(注意没有变音符号):

string("A naive man called  was having pina colada and creme brulee.")

编辑:

关于目的:我正在编写一个分析英语文本的应用程序。输入文件为UTF-8,可能包含特殊字符。我的应用程序的一部分使用了用C编写的仅能理解ASCII的库。因此,我需要一种将文本“哑化”为ASCII而不丢失太多信息的方法。

关于精确的要求:任何作为变体形式的ASCII字符的字符都应转换为该ASCII字符;其他所有字符均应省略。因此ıĩî应该成为,i因为它们都是小写拉丁字母i的所有版本。ɩ另一方面,字符(iota)虽然外观上相似,但不是小拉丁字母i的版本,因此应省略。

头脑暴乱

在GitHub上有unidecode-cxx,它是node-unidecode的C ++端口(未完成),而后者又是Perl的Text :: Unicode的JavaScript端口C ++版本的边缘有点粗糙,但是src/unidecode.cxx可以修改中的示例以转换示例字符串,

A naïve man called 晨 was having piña colada and crème brûlée.

如下:

A naive man called Chen was having pina colada and creme brulee.

为了使代码可以在没有Gyp的情况下进行编译(这是我从未使用过的,并且现在还没有时间弄清楚),我不得不对代码进行一些修改(快速又肮脏):

  • 添加#include <iostream>src/unidecode.cxx,并添加以下main例程:

    int main() {
      string output_buf;
      string input_buf = "A naïve man called 晨 was having piña colada and crème brûlée.";
      unidecode(&input_buf, &output_buf);
      cout << output_buf.c_str() << endl;
    }
    
  • 替换所有提到的NULLsrc/data.cxxnullptr

然后我用

g++ -std=c++11 -o unidecode unidecode.cxx

获得预期的结果。

该代码看起来像是一个相当原始的端口,并且可以进行一些改进,尤其是在更“合适”的C ++中。它在内部使用静态编译的转换表,如果不这样做,则可以对其进行调整以满足您的需求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将任何字符串转换为按位倒置的ASCII字符串?

来自分类Dev

如何将uint16_t转换为宽字符串(std :: wstring)

来自分类Dev

如何将i32转换为表示ASCII字符的字符串

来自分类Dev

如何将数字转换为ASCII值或字符并存储在字符串数组中

来自分类Dev

PHP:如何将ASCII转换为HTML或如何解码字符串

来自分类Dev

如何将“ thm conjI”转换为可以保存到文件的ASCII字符串?

来自分类Dev

如何将ASCII字符串转换为十进制数字?

来自分类Dev

如何将“ thm conjI”转换为可以保存到文件的ASCII字符串?

来自分类Dev

如何将ASCII数组(图像)转换为单个字符串

来自分类Dev

如何将字符串转换为 ASCII,然后再返回到 Haskell?

来自分类Dev

如何将 Encoding.ASCII.GetBytes 转换为字符串

来自分类Dev

如何将 UTF-8 中的字符串转换为 ASCII 忽略错误并删除非 ASCII 字符

来自分类Dev

如何将字符串转换为Unicode字符

来自分类Dev

如何将字符从数组转换为字符串

来自分类Dev

如何将字符数组转换为字符串

来自分类Dev

如何将字符串转换为字符

来自分类Dev

如何将十六进制字符缓冲区转换为ASCII字符串[C]

来自分类Dev

如何将字符串转换为BSON?

来自分类常见问题

如何将interface {}转换为字符串?

来自分类Dev

如何将MultiIndex转换为字符串类型

来自分类Dev

如何将字符串转换为枚举?

来自分类Dev

如何将HtmlAttribute转换为字符串?

来自分类Dev

如何将字符串值转换为枚举

来自分类Dev

如何将字符串值转换为斜体

来自分类Dev

如何将字符串转换为可读流?

来自分类Dev

如何将CoreLocation坐标转换为字符串?

来自分类Dev

如何将字符串转换为整数

来自分类Dev

如何将列表转换为多行字符串?

来自分类Dev

如何将字符串转换为Java列表?

Related 相关文章

  1. 1

    如何将任何字符串转换为按位倒置的ASCII字符串?

  2. 2

    如何将uint16_t转换为宽字符串(std :: wstring)

  3. 3

    如何将i32转换为表示ASCII字符的字符串

  4. 4

    如何将数字转换为ASCII值或字符并存储在字符串数组中

  5. 5

    PHP:如何将ASCII转换为HTML或如何解码字符串

  6. 6

    如何将“ thm conjI”转换为可以保存到文件的ASCII字符串?

  7. 7

    如何将ASCII字符串转换为十进制数字?

  8. 8

    如何将“ thm conjI”转换为可以保存到文件的ASCII字符串?

  9. 9

    如何将ASCII数组(图像)转换为单个字符串

  10. 10

    如何将字符串转换为 ASCII,然后再返回到 Haskell?

  11. 11

    如何将 Encoding.ASCII.GetBytes 转换为字符串

  12. 12

    如何将 UTF-8 中的字符串转换为 ASCII 忽略错误并删除非 ASCII 字符

  13. 13

    如何将字符串转换为Unicode字符

  14. 14

    如何将字符从数组转换为字符串

  15. 15

    如何将字符数组转换为字符串

  16. 16

    如何将字符串转换为字符

  17. 17

    如何将十六进制字符缓冲区转换为ASCII字符串[C]

  18. 18

    如何将字符串转换为BSON?

  19. 19

    如何将interface {}转换为字符串?

  20. 20

    如何将MultiIndex转换为字符串类型

  21. 21

    如何将字符串转换为枚举?

  22. 22

    如何将HtmlAttribute转换为字符串?

  23. 23

    如何将字符串值转换为枚举

  24. 24

    如何将字符串值转换为斜体

  25. 25

    如何将字符串转换为可读流?

  26. 26

    如何将CoreLocation坐标转换为字符串?

  27. 27

    如何将字符串转换为整数

  28. 28

    如何将列表转换为多行字符串?

  29. 29

    如何将字符串转换为Java列表?

热门标签

归档