将字符表示为utf-16代码单元

时间:2016-08-03 06:46:46

标签: c# pdf stringbuilder utf-16 adobe-reader

StringBuilder builder = new StringBuilder();
builder.Append(" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)");
for(int i=0;i<builder.Length;i++)
{
    if(data[i] == "\" && data[i-1] == "\")
        data[i] += " ";
}

如果字符串中有两个反斜杠。我需要在它们之间添加一个空格。在上面的代码中,如果条件,我得到错误“将字符表示为utf-16代码单元”。因为,使用这个,我正在创建一个PDF文件。提前致谢。

1 个答案:

答案 0 :(得分:2)

将鼠标悬停在这段代码上时收到的消息: 这一行"\"

 if (data[i] == "\" && data[i-1] == "\")

实际上不是错误,而是类String的注释/描述。

反斜杠用于表示escape sequence。文档告诉:

  

由反斜杠(\)后跟字母或数字组合组成的字符组合称为&#34;转义序列。&#34;要表示换行符,单引号或字符常量中的某些其他字符,必须使用转义序列。转义序列被视为单个字符,因此有效作为字符常量。

出现混淆是因为当您使用"时,编译器认为您希望将\"作为字符串中的字符。这就是为什么intellisense仍然用string的颜色标记线的其余部分,直到找到"前面没有反斜杠的点。

您可以使用@运算符强制解释字符串,因此反斜杠将只是一个字符:

if (data[i] == @"\" && data[i-1] == @"\")

并且您的代码可以编译。

不幸的是,当i为0时,你的循环会在第一次迭代中中断。因为data不能用-1进行索引。 如果你的问题是在两个连续的反斜杠之间加一个空格,我建议采用不同的方法。

您可以使用这样的Replace方法:

string s =  @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)";

s = s.Replace(@"\\", @"\ \");

我不太清楚data数组在您的代码中扮演的角色,但您也可以使用StringBuilder

StringBuilder builder = new StringBuilder();
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)");

builder.Replace(@"\\", @"\ \");