我在 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 中,您可以使用 wscanf
和 wprintf
对宽字符字符串进行 I/O。如果你的角色在 BMP 中,那就没问题了。只需将 char *
替换为 wchar_t *
并照常执行各种操作即可。
对于认真的开发,我建议将所有字符串转换为 char32_t
进行处理。或者使用像 ICU
这样的库。
如果您需要的只是删除字符串中的某些给定字符,那么也许您不需要复杂的 unicode 字符处理。将您的 unicode 字符视为原始 char *
字符串,并对其执行任何字符串操作。
旧的面向 C++ 的答案复制如下,供引用。
<小时/>简单的方法
它基本上是一个 std::string
,但输入的是单个字符 wchar_t
。
对于 IO,您应该使用 std::wcin
和 std::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/