C# Microsoft.VisualBasic.FileIO.TextFieldParser不';不要用引号
我正在使用TextFieldParser解析X509证书的主题和颁发者字段。例如,如果您查看上的证书,您将看到C# Microsoft.VisualBasic.FileIO.TextFieldParser不';不要用引号,c#,csv,C#,Csv,我正在使用TextFieldParser解析X509证书的主题和颁发者字段。例如,如果您查看上的证书,您将看到 CN=*.facebook.com,O="Facebook, Inc.",L=Menlo Park,S=CA,C=US 当然,如果不是因为那些讨厌的引号,用逗号分隔这一行是很简单的。所以我必须逃避这些。这就是我想使用TextFieldParser的原因。我的代码: string[] subjectPieces = null; using (MemoryStream memStrea
CN=*.facebook.com,O="Facebook, Inc.",L=Menlo Park,S=CA,C=US
当然,如果不是因为那些讨厌的引号,用逗号分隔这一行是很简单的。所以我必须逃避这些。这就是我想使用TextFieldParser的原因。我的代码:
string[] subjectPieces = null;
using (MemoryStream memStream = new MemoryStream(Encoding.ASCII.GetBytes(cert.Subject)))
using (Microsoft.VisualBasic.FileIO.TextFieldParser parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(memStream))
{
parser.SetDelimiters(",");
parser.HasFieldsEnclosedInQuotes = true;
subjectPieces = parser.ReadFields();
}
当此代码运行时,subjectPieces
将返回:
CN=*.facebook.com
O="Facebook
Inc."
L=Menlo Park
S=CA
C=US
如您所见,它根本不考虑引号中的字段。我可能只是使用了string.split(',')
我已尝试将HasFieldsEnclosedInQuotes设置为true和false,但没有效果。我尝试了流的多字符编码,但没有效果。我不是CSV格式的专家,但我认为出现这种情况的原因是您的示例文本不是有效的CSV格式。如中所述: 带有嵌入逗号或双引号字符的字段必须加引号 换句话说,要使您的示例成为正确的CSV文件,
O=“Facebook,Inc.”
必须是“O=Facebook,Inc.”
,即整个字段必须双引号
因此,要继续使用TextFieldParser
类,您需要确保字段被正确引用,并且嵌入的双引号字符被引用
此外,您可能需要查看其他选择