当字符串中有奇怪字符时,如何使用 C# 的 IndexOf

How do I use C#'s IndexOf when strange characters are in the string

下面是在 NotePad++ 中查看文本时的样子。

我需要获取该字符串的 IndexOf。使用下面的代码。而且我不知道如何在我的代码中使用奇怪的字符。

int start = text.IndexOf("AppxxxxxxDB INFO");

其中 "xxxxx" 代表奇怪的字符。

这些字符都有对应的ASCII codes,可以通过转义插入到字符串中

例如:

"App\x0000\x0001\x0000\x0003\x0000\x0000\x0000DB INFO"

或更短:

"App\x00\x01\x00\x03\x00\x00\x00"+"DB INFO"

\xXXXX表示你specify one characterXXXX字符对应的十六进制数

Notepad++ 只是想通过在 "bubble" 中打印缩写来呈现这些字符,使其更方便一些。但这只是渲染。

这些字符的来源是打印机(和其他媒体)指令。例如,您需要指示打印机移动到下一行,停止打印作业,如今它们仍在使用。一些终端使用它们来传达颜色变化等。最著名的是 \n\x000A,这意味着您开始新的一行。因此,对于文本,它们是指定 如何处理文本的字符。 有点等同于现代 html 等(尽管只是有限的等同)。 \n 因此只是一个新行,因为对此已达成共识。如果一个人定义his/her自己的编码,他可以发明一个新系统。

回应@JonSkeet 的警告,当您将文件读入字符串时,文件的字节将根据字符集编码进行解码。解码器必须对根据编码规则无效的字节值或序列进行处理。典型的解码器替换一个替换字符并尝试继续。

我称之为数据损坏。在大多数情况下,我宁愿让解码器抛出异常。

您可以使用标准解码器 customize one 或使用编码 class 创建一个新解码器以获得您想要的行为。或者,您可以通过将文件读取为字节而不是文本来保留原始字节。

如果你坚持把文件读成文本,我建议使用437编码,因为它有256个字符,每个字节值一个,字节顺序没有限制,每个437字符也是Unicode。表示文本的字节可能会将您要搜索的相同字符解码为字符串,但您必须检查,在此 table.

中比较 437 和 Unicode

真的,您应该拥有并遵循您正在阅读的文件类型的规范。毕竟没有文字只有编码的文字,你得知道是什么编码