There's a problem in isprintrune in sbase, it can only return 0 because
of the “&& (r < 0xFFF9) && (r > 0xFFFB)” part. When fixing it (and the
others problems I mentioned earlier), Ralph's patch works (it needs
cleaning though).
The only real way to do this is to also look at wide characters. As you
may have already seen, I finished up libutf in regard to the is*rune()-
functions, so just go through each filename _rune by rune_ and check if
isprintrune() is false, replacing the rune with '?'.
I'm not sure how this differs from Ralph's implementation. Do you mean
he should decode the filename to get a rune array, modify it, then
encode the array back?