Linux and Windows use different character encoding systems by default. (
https://superuser.com/questions/294219/what-are-the-differences-between-linux-and-windows-txt-files-unicode-encoding)
In short, Linux usually defaults to using UTF-8 encoding, which is fine for latin scripts, but can't represent Japanese (because 8 bits isn't enough to represent all the characters in the language). The reason you get giberrish, is that at some point when it takes the larger
unit data and converts it to UTF-8 (or some other smaller encoding type) automatically, it is simply discarding all the information in the extra bits.
This could be an issue with the program you are using to display data on Linux (in which case the code is fine). Have you tried copying the data file you generate on the Linux system and trying to display it on a Windows machine? If this turns out to be the problem, you need to change the settings of whatever program you are displaying data with on Linux.
Otherwise, if it is a code issue, there is likely to be a setting somewhere in CSVConfig (I've never used that library, so you would have to check the documentation) to make sure it is using UTF-16 Unicode (rather than the system default). You would need to make sure the program is using the correct (i.e. larger) encoding system so that it can handle Japanese characters.