我不知道该行是否以 '\n' 或 '\r' 或 '\r\n' 结尾,并且不知道文本是由什么编码的,除了如果编码是 utf-8,它可以是没有炸弹。是否有函数或库可以做到这一点,或者只是告诉我一行的终止。
问问题
165 次
2 回答
1
使用 wcslen 获取 utf8 字符串的字节大小。
于 2013-03-28T13:07:40.697 回答
1
您是否偶然在为阅读文本而打开的文件上使用fgets
, fread
, fputs
,等?fwrite
如果是这样,该实现将在读取时自动将特定于操作系统的行终止符(例如"\r\n"
)转换为,并在写入时转换为特定于操作系统的行终止符。'\n'
'\n'
还有其他两种情况,其中一种是 OP:
- OP 正在努力
"\r\n"
从其他操作系统软件中继承,因此打开文件以在他的(可能是类 Unix)操作系统中读取将不再转换它。我的建议是使用dos2unix
这些一次性转换,而不是用可能永远不会再次运行的东西来膨胀你的代码。 - 您没有使用这些功能之一。这可能是因为您正在使用诸如套接字之类的流,并且协议可能需要
"\r\n"
. 在这种情况下,您应该使用strstr
查找确切的序列"\r\n"
。
UTF-8 在设计时考虑到了与 ASCII 的一定程度的兼容性,因此您可以假设任何使用 UTF-8 的系统也将使用 ASCII 或一些类似的字符集。任何使用大于一个字节的序列的字符将只使用 0x80 或更大的值来表示。由于'\n'
位于 0x00-0x7F 范围内,因此可以保证它是一个单字节,并且不会作为多字节字符的一部分存在。
于 2013-03-28T13:22:34.013 回答