Я работаю над проектом Kotlin, где мне нужно взять некоторые входящие данные и вывести строку форматированной CSV. Я решил попробовать использовать библиотеку CSV Apache-Commons для обработки создания вывода CSV. Хотя в основном это работает, есть какое-то странное поведение в том, как оно обрабатывает двойные цитаты в входящих данных. Если я правильно понимаю правила форматирования CSV, строка, содержащая двойную цитату, должна сбежать с дополнительной двойной цитатой. Так что, если моя входная строка - «foo , выходной строкой должна быть« foo . Однако, когда я создаю свою выходную строку с помощью CSVFormat, я вместо этого получаю выход »« »foo .
Почему я получаю дополнительную двойную цитату в выводе? Это ошибка или ожидаемое поведение? Есть ли способ обойти это без полного отключения цитирования?fun Rosters.toCsvString(includeHeader: Boolean): String {
val writer = StringWriter()
val builder = CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.MINIMAL)
if(includeHeader){
builder.setHeader(Rosters.Header::class.java)
}
val printer = CSVPrinter(writer, builder.get())
return writer.use {
printer.printRecords(this.rosters.map { it.values() })
writer.toString()
}
}
< /code>
Если я запускаю тест на эту функцию: < /p>
@Test
fun `Test convertRosterToCsvWithSpecialChars`()
{
val expected = """
EPPN,FirstName,LastName,Email,ClassStanding,StudentID,Degree,College,Department,SuitableRole
""foo014"",Foo,Bar,[email protected],,9200#8210,,,,ROLE_TENANT_ADVISOR,
""".trimMargin()
val worker1 = Roster("\"foo014\"","Foo","Bar","[email protected]",
studentId = "9200#8210", suitableRole = "ROLE_TENANT_ADVISOR")
val incomingRosters = Rosters(listOf( worker1))
val actual = incomingRosters.toCsvString(true)
assertThat(actual).isEqualToNormalizingNewlines(expected)
}
< /code>
Я получаю ошибку: < /p>
Expecting actual:
"EPPN,FirstName,LastName,Email,ClassStanding,StudentID,Degree,College,Department,SuitableRole
"""foo014""",Foo,Bar,[email protected],,9200#8210,,,,ROLE_TENANT_ADVISOR
"
to be equal to:
"EPPN,FirstName,LastName,Email,ClassStanding,StudentID,Degree,College,Department,SuitableRole
""foo014"",Foo,Bar,[email protected],,9200#8210,,,,ROLE_TENANT_ADVISOR,
"
when ignoring newline differences ('\r\n' == '\n')
Подробнее здесь: https://stackoverflow.com/questions/796 ... characters
Apache-Commons-CSV Добавление дополнительных символов двойной цитаты ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение