c - c中的unicode字符串操作

标签 c string unicode utf-8

我在 linux mint 15 中使用 gcc,并且我的终端可以理解 unicode。我将处理 UTF-8。我正在尝试获取更复杂的 unicode 字符串的基词。有点像将“替代”一词缩减为“替代”,但使用的是不同的语言。因此我需要测试每个单词的结尾。

在 c 和 ASCII 中,我可以做这样的事情

if(string[last_char]=='e')
    last_char-=1; //Throws away the last character

我可以用 unicode 做类似的事情吗?也就是说,像这样:

if(string[last_char]=='ഒ')
    last_char=-1

最佳答案

编辑: 抱歉,正如 @chux 所说,我刚刚通知您正在用 C 语言提问。无论如何,同样的原则成立。

在 C 中,您可以使用 wscanfwprintf 对宽字符字符串进行 I/O。如果你的角色在 BMP 中,那就没问题了。只需将 char * 替换为 wchar_t * 并照常执行各种操作即可。

对于认真的开发,我建议将所有字符串转换为 char32_t 进行处理。或者使用像 ICU 这样的库。

如果您需要的只是删除字符串中的某些给定字符,那么也许您不需要复杂的 unicode 字符处理。将您的 unicode 字符视为原始 char * 字符串,并对其执行任何字符串操作。

旧的面向 C++ 的答案复制如下,供引用。

<小时/>

简单的方法

使用std::wstring

它基本上是一个 std::string,但输入的是单个字符 wchar_t

对于 IO,您应该使用 std::wcinstd::wcout。例如:

std::wstring str;
std::wcin >> str;
std::wcout << str << std::endl;

但是,在某些平台中,wchar_t 是 2 字节宽,这意味着 BMP 之外的字符。不管用。我认为这对你来说应该没问题,但不应该在严肃的开发中使用。有关此主题的更多文字,请阅读 this .

艰难的道路

使用更好的支持 unicode 的字符串处理库,例如 ICU .

C++11 方式

使用一些机制将输入字符串转换为 std::u32string 就完成了。转换例程可以手工制作或使用现有的库(如 ICU)。

由于 std::u32string 是使用 char32_t 形成的,因此您可以放心地假设您正在正确处理 Unicode。

关于c - c中的unicode字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309571/

相关文章:

python - 如何使用 Scipy.io.loadmat 将 Matlab mat 文件中的字符串元胞数组加载到 Python 列表或元组中

perl - Perl 中字符串的长度与字符编码无关

c - 二进制和外部输入的无效操作数

c++ - C wINnet 互联网连接()

C 简单数组代码不起作用

vba - 在 VBA StrConv 中使用 Unicode

Python - 有没有办法让项目中的所有字符串默认为 unicode?

c - 使用 Windows slim 读/写锁

c - 用 C 语言复制 Spinrite 动画效果

java - 换行符与系统换行符不同