Во-первых, давайте спросим себя: «Почему мы чувствуем необходимость обрабатывать запятые по-разному для файлов CSV?»
Для меня ответ таков: «Потому что, когда я экспортирую данные в файл CSV, запятые в поле исчезают, и мое поле разделяется на несколько полей, в которых запятые появляются в исходных данных». (Это потому, что запятая является символом-разделителем полей CSV.)
В зависимости от вашей ситуации, точки с запятой также могут использоваться в качестве разделителей полей CSV.
Учитывая мои требования, я могу использовать символ, например, одиночную кавычку с низким 9, которая выглядит как запятая.
Итак, вот как вы можете сделать это в Go:
// Replace special CSV characters with single low-9 quotation mark
func Scrub(a interface{}) string {
s := fmt.Sprint(a)
s = strings.Replace(s, ",", "‚", -1)
s = strings.Replace(s, ";", "‚", -1)
return s
}
Второй символ с запятой в функции замены - десятичное 8218.
Имейте в виду, что если у вас есть клиенты, которые могут иметь программы чтения текста только для ascii, этот символ decima 8218 не будет выглядеть как запятая. Если это ваш случай, я бы рекомендовал окружить поле запятой (или точкой с запятой) двойными кавычками в RFC 4128: https://tools.ietf.org/html/rfc4180