编码是否会影响strstr()(和相关函数)的结果

时间:2011-11-21 09:08:11

标签: c++ c

字符集编码会影响strstr()函数的结果吗?

例如,我已将数据读入“buf”并执行此操作:

char *p = strstr (buf, "UNB");

我想知道数据是用ASCII编码还是其他(例如EBCDIC)会影响这个函数的结果? (由于“UNB”是不同编码方式下的不同比特流...)

如果是,那么这些功能的默认值是多少? (ASCII?)

谢谢!

5 个答案:

答案 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格式编码。