-
artoo_checks()gained aninvalid_encodingdimension (on by default):
check_spec()flags character values whose bytes are not valid UTF-8, the
signature of a source read under a mis-declared encoding, before a writer
aborts on them. -
artoo_encodings()name resolution now accepts the SAS OEM/DOS encoding
names (pcoem437,pcoem850,pcoem852,pcoem858,pcoem862,
pcoem866,msdos737), and the reference table lists thePCOEM437/
PCOEM850rows. -
write_xpt(),write_json(),write_ndjson(), andwrite_parquet()
accepton_invalid = "translit", folding smart punctuation (curly quotes,
en/em dashes, ellipsis, bullet) to its exact ASCII form per the SAS NLS
punctuation table; characters with no fold still abort loudly. -
write_xpt(),write_json(),write_ndjson(), andwrite_parquet()
also accepton_invalid = "fold": the punctuation fold plus the ICU
Latin-ASCII accent strip (ÖtoO,ßtoss,ÆtoAE), pinned
as data so the result is identical on every platform; characters neither
table maps (the Euro sign) still abort. -
write_xpt()now warns (artoo_warning_encoding) when a value forces a
column wider than its spec-declared length, instead of widening silently;
data is still never truncated. -
write_xpt()and the other writers'on_invalid = "replace"now
substitutes one?per unrepresentable character instead of one per byte
(a curly quote previously became???). -
New article: Migrating clinical data from WLATIN1 to UTF-8, including
the smart-punctuation fold table and the byte-length migration recipe.