Comma-separated values a spreadsheet opens with every character intact (since 0.18.0). The separator is the comma; a spreadsheet set to another list separator — Excel under a Spanish locale — asks for it on import.
=, +, -, @, tab, carriage return, line feed) or their full-width
forms (=, +, -, @). A product named =HYPERLINK(…) is text. A negative
number becomes the text '-5 as well, which is the price OWASP's own alternatives
pay too. So does an identifier: an address may begin with +, - or = (RFC 5322
allows all three in its local part), and +amy@example.test is exported as
'+amy@example.test — shown with the apostrophe, and a different string to whoever
reads the file back. A host exporting people, or anything it will import again,
prices that or strips the apostrophe on the way in.Every host that exports a list writes this. The guard is the part each copy got wrong, measured on the first one, which missed the line feed and the full-width forms.
Comma-separated values a spreadsheet opens with every character intact (since 0.18.0). The separator is the comma; a spreadsheet set to another list separator — Excel under a Spanish locale — asks for it on import. - The bytes are UTF-8 with a byte order mark, so Excel reads a ñ as one character. - Every field is quoted, with its quotes doubled, and every line ends in CRLF. - A field a spreadsheet would read as a formula is prefixed with an apostrophe, so it is shown and never run. That is any field beginning with one of OWASP's CSV-injection characters (`=`, `+`, `-`, `@`, tab, carriage return, line feed) or their full-width forms (`=`, `+`, `-`, `@`). A product named `=HYPERLINK(…)` is text. A negative number becomes the text `'-5` as well, which is the price OWASP's own alternatives pay too. So does an identifier: an address may begin with `+`, `-` or `=` (RFC 5322 allows all three in its local part), and `+amy@example.test` is exported as `'+amy@example.test` — shown with the apostrophe, and a different string to whoever reads the file back. A host exporting people, or anything it will import again, prices that or strips the apostrophe on the way in. Every host that exports a list writes this. The guard is the part each copy got wrong, measured on the first one, which missed the line feed and the full-width forms.
(attachment rows filename)rows as a CSV download saved under filename: write inside
response/attachment, typed text/csv; charset=utf-8. A response to a request with a
subject or a session is already no-store (gate/wrap-subject); an export reached
with neither is the host's to mark.
`rows` as a CSV download saved under `filename`: `write` inside `response/attachment`, typed `text/csv; charset=utf-8`. A response to a request with a subject or a session is already `no-store` (`gate/wrap-subject`); an export reached with neither is the host's to mark.
(write rows)rows, each a sequence of values (str of each, nil as empty), as the bytes of a
CSV file.
`rows`, each a sequence of values (`str` of each, nil as empty), as the bytes of a CSV file.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |