Add option -q to "hdfs dfs -ls" to print non-printable characters as "?". Non-printable characters are defined by isprint(3) according to the current locale.
Default to -q behavior on terminal; otherwise, print raw characters. See the difference in these 2 command lines:
- hadoop fs -ls /dir
- hadoop fs -ls /dir | od -c
In C, isatty(STDOUT_FILENO) is used to find out whether the output is a terminal. Since Java doesn't have isatty, I will use JNI to call C isatty() because the closest test System.console() == null does not work in some cases.