Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.VisualBasic.FileIO.TextFieldParser不';不要用引号_C#_Csv - Fatal编程技术网

C# Microsoft.VisualBasic.FileIO.TextFieldParser不';不要用引号

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

我正在使用TextFieldParser解析X509证书的主题和颁发者字段。例如,如果您查看上的证书,您将看到

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
类,您需要确保字段被正确引用,并且嵌入的双引号字符被引用

此外,您可能需要查看其他选择