Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EclipseVM参数中使用的字符编码是什么?_Java_Encoding_Character Encoding_Jvm Arguments_Vmargs - Fatal编程技术网

Java EclipseVM参数中使用的字符编码是什么?

Java EclipseVM参数中使用的字符编码是什么?,java,encoding,character-encoding,jvm-arguments,vmargs,Java,Encoding,Character Encoding,Jvm Arguments,Vmargs,我们读取一个重要参数作为vm参数,它是文件的路径。现在,用户正在使用带有一些韩文字符的vm参数(文件夹已使用韩文字符命名),程序开始中断,因为韩文字符被读取为问号!下面的实验显示了技术状况 我试图在eclipse中调试一个程序,在“VM参数”的“参数”选项卡下的“调试配置”中,我给出了如下输入 String filepath = System.getProperty("filepath"); -Dfilepath=D:\XXXX\카운터 但是当我从这样的节目中读到它的时候 String fil

我们读取一个重要参数作为vm参数,它是文件的路径。现在,用户正在使用带有一些韩文字符的vm参数(文件夹已使用韩文字符命名),程序开始中断,因为韩文字符被读取为问号!下面的实验显示了技术状况

我试图在eclipse中调试一个程序,在“VM参数”的“参数”选项卡下的“调试配置”中,我给出了如下输入

String filepath = System.getProperty("filepath");
-Dfilepath=D:\XXXX\카운터

但是当我从这样的节目中读到它的时候

String filepath = System.getProperty("filepath");
我得到带有问号的输出,如下所示

D:\XXXX\

我知道eclipse调试GUI使用正确的编码(?)来显示正确的字符,但当在程序中读取值时,它使用不同的编码,无法正确读取字符

java用来读取提供给它的vm参数的默认编码是什么


如何在eclipse中更改编码,以便程序正确读取字符?

我的结论是转换取决于默认编码(Windows设置“非Unicode程序的语言”) 以下是测试程序:

package test;
import java.io.FileOutputStream;
public class Test {
public static void main(String[] args) throws Exception {
    StringBuilder sb = new StringBuilder();
    sb.append("[카운터] sysprop=[").append(System.getProperty("cenv"));
    if (args.length > 0) {
        sb.append("], cmd args=[").append(args[0]);
    }
    sb.append("], file.encoding=").append(System.getProperty("file.encoding"));
    FileOutputStream fout = new FileOutputStream("/testout");
    fout.write(sb.toString().getBytes("UTF-8"));
    fout.close();//write result to a file instead of System.out
    //Thread.sleep(10000);//For checking arguments using Process Explorer
}
}
测试1:“非Unicode程序的语言”是韩语(韩国) 在命令提示符下异常:
java-Dcenv=카운터  测试,测试카운터(当我使用Process Explorer验证参数时,韩文字符是正确的)

结果:
[카운터] sysprop=[카운터], cmd args=[카운터], file.encoding=MS949

测试2:“非Unicode程序的语言”是中文(繁体,台湾) 在命令提示下异常(从剪贴板粘贴):
java-Dcenv=카운터  测试,测试카운터(我在命令窗口中看不到韩文字符。但是,当我使用Process Explorer验证参数时,韩文字符是正确的)

结果:
[카운터] sysprop=[???],cmd args=[???],file.encoding=MS950

测试3:“非Unicode程序的语言”是中文(繁体,台湾) 通过设置程序参数和VM参数从Eclipse启动(Process Explorer中的命令行是
C:\pg\jdk160\bin\javaw.exe-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:50672-Dcenv=카운터 -Dfile.encoding=UTF-8-类路径S:\ws\wtest\bin test.test카운터这与您在Eclipse调试视图的属性对话框中看到的相同)

结果:
[카운터] sysprop=[???],cmd args=[bin],file.encoding=UTF-8

将韩语字符更改为“碁石",存在于MS950/MS949字符集中:
  • 测试1结果:
    [碁石] sysprop=[碁石], cmd args=[碁石], file.encoding=MS949
  • 测试2结果:
    [碁石] sysprop=[碁石], cmd args=[碁石], file.encoding=MS950
  • 测试3结果:
    [碁石] sysprop=[碁石], cmd args=[碁石], file.encoding=UTF-8
将韩语字符更改为“鈥焢,存在于MS950字符集中:
  • 测试1结果:
    [鈥焢] sysprop=[??],cmd args=[??],file.encoding=MS949
  • 测试2结果:
    [鈥焢] sysprop=[鈥焢], cmd args=[鈥焢], file.encoding=MS950
  • 测试3结果:
    [鈥焢] sysprop=[鈥焢], cmd args=[鈥焢], file.encoding=UTF-8
将韩语字符更改为“宽广“,存在于GBK字符集中:
  • 测试1结果:
    [宽广] sysprop=[??],cmd args=[??],file.encoding=MS949
  • 测试2结果:
    [宽广] sysprop=[??],cmd args=[??],file.encoding=MS950
  • 测试3结果:
    [宽广] sysprop=[??],cmd args=[??],file.encoding=UTF-8
  • 测试4:为了验证我的假设,我将“非Unicode程序的语言”更改为中文(简体,PRC)和exceute
    java-Dcenv=宽广 测试,测试宽广在命令提示符中
    结果:
    [宽广] sysprop=[宽广], cmd args=[宽广], file.encoding=GBK

在测试期间,我总是通过Process Explorer检查命令行,并确保所有字符都正确。 但是,在调用Java类
main(String[]args)之前,使用默认编码转换命令参数字符。如果默认编码的字符集中不存在任何字符,程序将获得意外的参数

我不确定问题是由java.exe/javaw.exe或Windows引起的。但是通过命令参数传递非ASCII参数不是一个好主意

顺便说一句,我也尝试通过.bat文件执行命令(文件编码为UTF-8)。可能有人感兴趣

测试5:“非Unicode程序的语言”是韩语(韩国) Process Explorer中的命令行是
java-Dcenv=移댁슫?? 测试,测试移댁슫??(韩文字符已折叠)

结果:
[카운터] sysprop=[移댁슫??], cmd args=[移댁슫??], file.encoding=MS949

测试6:“非Unicode程序的语言”是韩语(韩国) 添加另一个VM参数。Process Explorer中的命令行是
java-Dfile.encoding=UTF-8-Dcenv=移댁슫?? 测试,测试移댁슫??(韩文字符已折叠)

结果:
[카운터] sysprop=[移댁슫??], cmd args=[移댁슫??], file.encoding=UTF-8

测试7:“非Unicode程序的语言”是中文(繁体,台湾) Process Explorer中的命令行是
java-cp s:\ws\wtest\bin-Dcenv=儦渥?? 测试,测试儦渥??(韩文字符已折叠)

结果:
[카운터] sysprop=[儦渥??], cmd args=[儦渥??], file.encoding=MS950


您如何知道属性的值是
D:\XXXX\?
?您是如何检查/显示它的?1.我在控制台中打印,它是问号2.我能够从eclipse调试透视图中看到变量的值3.我通过手动键入字符串“D:\XXXX\?”进行确认???“这与我在filepath变量中得到的结果是一样的。当我尝试在Windows中运行时(从