while IFS="$(printf \\a)" read -r field1 field2... do ... done
Getting records that contain newlines would be a bit trickier.
...I found it - the question is under review by the Austin group for inclusion in POSIX.
https://austingroupbugs.net/view.php?id=249
Getting records that contain newlines would be a bit trickier.