1

I tried to pass filename with unicode characters to my java program in Windows cmd, but the filename I got in program was broken. Those unicode characters were presented as ?, and it threw IOException when I read those file.
However, if I use wildcard like *.txt, it works correctly.

For example, I have a file called [テスト]测试文件1.txt in my directory. And I wrote a simple java program to show arguments it received, which also prints string bytes.

import java.util.Arrays;

public class FileArg {
    public static void main(String[] args) {
        for (String fn: args) {
            System.out.println(fn);
            System.out.println(Arrays.toString(fn.getBytes()));
        }
    }
}

My Java version is 15, and I have chcp to 65001, also running program with -Dfile.encoding=UTF-8 flag.
Then I run java -Dfile.encoding=UTF-8 FileArg "[テスト]测试文件1.txt" [テスト]测试文件1.txt *.txt. The filename is broken if I passed them directly, but it works perfectly with wildcard.

The output:

[???]??文件1.txt
[91, 63, 63, 63, 93, 63, 63, -26, -106, -121, -28, -69, -74, 49, 46, 116, 120, 116]
[???]??文件1.txt
[91, 63, 63, 63, 93, 63, 63, -26, -106, -121, -28, -69, -74, 49, 46, 116, 120, 116]
[テスト]测试文件1.txt
[91, -29, -125, -122, -29, -126, -71, -29, -125, -120, 93, -26, -75, -117, -24, -81, -107, -26, -106, -121, -28, -69, -74, 49, 46, 116, 120, 116]

Result: console output

BTW, my default code page is cp950 (BIG5).

How could I get it work?

Tony Yang
  • 21
  • 2
  • 4
  • 1
    I suggest reading the comments below the question [How to fix Java args not getting Japanese characters properly in string from Windows Explorer?](https://stackoverflow.com/questions/65894485/) I think, you have already read [Passing command line Unicode argument to Java code](https://stackoverflow.com/questions/7660651/). – Mofi Jun 14 '21 at 08:42

0 Answers0