字符集编码会影响strstr()函数的结果吗?
例如,我已将数据读入“buf”并执行此操作:
char *p = strstr (buf, "UNB");
我想知道数据是用ASCII编码还是其他(例如EBCDIC)会影响这个函数的结果? (由于“UNB”是不同编码方式下的不同比特流...)
如果是,那么这些功能的默认值是多少? (ASCII?)
谢谢!
答案 0 :(得分:3)
您的字符串常量(“UNB”)以源文件编码进行编码,因此它必须与缓冲区的编码匹配
答案 1 :(得分:3)
strstr
等C函数对原始char
数据进行操作,
独立于编码。在这种情况下,您可能有两个
不同的编码:编译器用于字符串文字的编码,
以及填写buf
时程序使用的程序。如果这些不是
同样,该功能可能无法按预期工作。
关于“默认”编码,没有一个,至少到目前为止
作为标准; “基本执行人物
set“是实现定义的。在实践中,系统没有
使用从ASCII派生的编码(ISO 8859-1似乎是最常见的,在
至少在欧洲这里极为罕见。至于你得到的编码
在buf
中,这取决于角色的来源;如果你是
从istream
读取,取决于地区imbue
d
流。然而,在实践中,几乎所有这些(UTF-8,
ISO8859-x等)源自ASCII,与ASCII相同
对于基本执行字符集中的所有字符
(其中包括传统C中合法的所有角色)。因此对于
"UNB"
,你可能很安全。 (但对于像"üéâ"
这样的东西,你差不多
当然不是。)
答案 2 :(得分:1)
两个字符串参数必须是相同的编码。使用字符串文字编码C ++源代码(平台编码)。对于Unicode,UTF-8,该函数还有另一个问题:Unicode具有带变音符号的重音字母,但这些字母也可以编码为基本字母加上组合变音符号。 é可以是一个字母 [é] 或两个: [e] + [合并 - '] 。存在规范化。
对于Java来说,将源编码显式设置为UTF-8正变得越来越有用(非常安静的开发)。对于C ++项目,我不知道这些约定会变得普遍。
答案 3 :(得分:0)
strstr
应该在UTF-8编码的unicode字符上没有问题。
答案 4 :(得分:-1)
使用此功能,数据以ASCII格式编码。