Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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字符串编码转换问题_Java_Utf 8_Character Encoding - Fatal编程技术网

JAVA字符串编码转换问题

JAVA字符串编码转换问题,java,utf-8,character-encoding,Java,Utf 8,Character Encoding,在netbeans中启动时,我有一段代码工作正常(该代码替换从.odt文件提取的content.xml文件中的一些字符串): 如果我在命令行中使用Windows中的代码,比如java-jar。。。。文件中保存的字符已中断转换。 我意识到这是因为windows在编码CP1250时起作用,而当我以java-jar的形式启动代码时,使用的是CP1250。问题是如何使其正常工作?我在命令行中不使用该代码,但在applet中,从applet运行的代码与从CP1250中的命令行运行的代码的行为完全相同 我读

在netbeans中启动时,我有一段代码工作正常(该代码替换从.odt文件提取的content.xml文件中的一些字符串):

如果我在命令行中使用Windows中的代码,比如java-jar。。。。文件中保存的字符已中断转换。 我意识到这是因为windows在编码CP1250时起作用,而当我以java-jar的形式启动代码时,使用的是CP1250。问题是如何使其正常工作?我在命令行中不使用该代码,但在applet中,从applet运行的代码与从CP1250中的命令行运行的代码的行为完全相同

我读了很多关于编码的文章,但似乎没有任何帮助,只是使用指定的编码从命令行运行:

java -Dfile.encoding=utf-8 -jar Office.jar
解决了这个问题

意识到我想将参数传递给applet标记:

<object classid='clsid:8AD9C840-044E-11D1-B3E9-00805F499D93' width='500' height='30'> 
    <param name='codebase_lookup' value='false'> 
    <param name='archive' value='" . ServerURL . "/applets/Office/Office.jar'> 
    <param name='code' value='OfficeApplet'> 
    <param name='java_arguments' value='-Dfile.encoding=utf-8'
    <param name='data' value='" . $dataJSON . "'> 
    <comment> 
        <embed 
            codebase_lookup='false' 
            archive='" . ServerURL . "/applets/Office/Office.jar' 
            code='OfficeApplet' 
            width='500' 
            height='30'
            java_arguments='-Dfile.encoding=utf-8'
            data='" . $dataJSON. "' 
            type='application/x-java-applet' 
        > 
            <noembed> 
              You need JRE 1.7+
            </noembed> 
          </embed> 
        </comment> 
</object>


问题在于
Utils.readBinaryFile(path+“/content.xml”)
可能没有使用UTF-8编码从文件中读取数据。我的猜测是,您在util方法中使用了默认编码,这会随着系统的不同而变化

要解决此问题,需要在
readBinaryFile()
中指定文件的编码

InputStreamReader
是你的朋友。

你写道:

String cont = new String(Utils.readBinaryFile(path + "/content.xml"));
构造函数使用平台默认编码(可以是任何编码)将字节转换为字符。最简单的修复方法是使用允许指定编码的构造函数;例如:

String cont = new String(Utils.readBinaryFile(path + "/content.xml"), "UTF-8");

不幸的是,输入文件的编码可以更改,我不想强制这样做。感谢Joni发送的第二个答案,我在代码中发现了这个BUG,无论如何,感谢您的时间和建议。我确信我也这么做了,但在编码方面仍然存在问题(我有一行注释)。然后我意识到我犯了错误。在原始代码中,我编写了stringcont=newstring(Utils.readBinaryFile(path+“/content.xml”,“UTF-8”);而不是字符串cont=新字符串(Utils.readBinaryFile(path+“/content.xml”),“UTF-8”);非常相似,但只有第二个是以正确的方式进行转换。非常感谢。
String cont = new String(Utils.readBinaryFile(path + "/content.xml"));
String cont = new String(Utils.readBinaryFile(path + "/content.xml"), "UTF-8");