C# 如何将任何字符串转换为有效的CSV字段?

C# 如何将任何字符串转换为有效的CSV字段?,c#,csv,C#,Csv,我需要将表保存到CSV文件。表的每个单元格都可以包含带有字符的字符串,如:“,;”和新行。 如何将这些字符串转换为可以在Excel中打开的有效CSV字段?用双引号将每个单元格/值括起来,或使用制表符作为分隔符\t 您需要注意单元格/值中的双引号,您可以用单引号替换它们或使用转义字符 EAX示例: "Test", "test,123", "test 123", "test 123", "test 345" "Test", "test,123", "test 123", "test 123", "t

我需要将表保存到CSV文件。表的每个单元格都可以包含带有字符的字符串,如:“,;”和新行。

如何将这些字符串转换为可以在Excel中打开的有效CSV字段?

用双引号将每个单元格/值括起来,或使用制表符作为分隔符\t

您需要注意单元格/值中的双引号,您可以用单引号替换它们或使用转义字符

EAX示例:

"Test", "test,123", "test 123", "test
123", "test 345"
"Test", "test,123", "test 123", "test
123", "test 345"
"Test", "test,123", "test 123", "test
123", "test 345"

它应该是这么简单:

csvCell = "\"" + cell.Replace("\"", "\"\"") + "\"";

这将用“双引号”包装单元格文本,并用双“双引号”转义单元格内的“双引号”。

我将用空格替换回车,然后用双引号包装每个文本值


我没有尝试过使用制表符分隔的文件,但可以使用它来消除字符的任何歧义?

我也会查看以获得进一步的指导。

我知道这是一个很老的方法,但以下是我作为对象类扩展方法的解决方案:

public static class ObjectUtil {

    public static string ToCsvString(this object obj) {
        string result = obj.ToString();
        if (result.Contains("\"")) {
            result = result.Replace("\"", "\"\"");
        }
        if (result.Contains(",")) {
            result = string.Format("\"{0}\"", result);
        }
        if (result.Contains(Environment.NewLine)) {
            result = string.Format("\"{0}\"", result);
        }
        return result;
    }
}

这里有一个字符串扩展来简单地处理这个问题

public static string Escape(this string value)
{
    return string.Format("\"{0}\"", (value ?? string.Empty).Replace("\"", "\"\""));
}

“,”&“\n”上的包含应合并到
result.contains(',')||result.contains('\n')||result.contains('\r'))
目前,如果值同时包含换行符和逗号,您将用引号括起来两次。我不熟悉
c
,但我肯定您错了,因为您只转义了双引号。根据csv规范,您应该转义换行符和回车符。请参阅