3

我不知道该行是否以 '\n' 或 '\r' 或 '\r\n' 结尾,并且不知道文本是由什么编码的,除了如果编码是 utf-8,它可以是没有炸弹。是否有函数或库可以做到这一点,或者只是告诉我一行的终止。

4

2 回答 2

1

使用 wcslen 获取 utf8 字符串的字节大小。

http://linux.die.net/man/3/wcslen

于 2013-03-28T13:07:40.697 回答
1

您是否偶然在为阅读文本而打开的文件上使用fgets, fread, fputs,等?fwrite如果是这样,该实现将在读取时自动将特定于操作系统的行终止符(例如"\r\n")转换为,并在写入时转换为特定于操作系统的行终止符。'\n''\n'


还有其他两种情况,其中一种是 OP:

  1. OP 正在努力"\r\n"从其他操作系统软件中继承,因此打开文件以在他的(可能是类 Unix)操作系统中读取将不再转换它。我的建议是使用dos2unix这些一次性转换,而不是用可能永远不会再次运行的东西来膨胀你的代码。
  2. 您没有使用这些功能之一。这可能是因为您正在使用诸如套接字之类的流,并且协议可能需要"\r\n". 在这种情况下,您应该使用strstr查找确切的序列"\r\n"

UTF-8 在设计时考虑到了与 ASCII 的一定程度的兼容性,因此您可以假设任何使用 UTF-8 的系统也将使用 ASCII 或一些类似的字符集。任何使用大于一个字节的序列的字符将只使用 0x80 或更大的值来表示。由于'\n'位于 0x00-0x7F 范围内,因此可以保证它是一个单字节,并且不会作为多字节字符的一部分存在。

于 2013-03-28T13:22:34.013 回答