Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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
linux上的java unicode转换不适用于max os x_Java_Linux_Macos_Unicode - Fatal编程技术网

linux上的java unicode转换不适用于max os x

linux上的java unicode转换不适用于max os x,java,linux,macos,unicode,Java,Linux,Macos,Unicode,我正在Ubuntu Linux上编写一个java应用程序,它读入一个文本文件并从数据中创建一个xml文件。部分文本包含卷曲撇号和引号,我使用以下代码将其转换为直撇号和引号: dataLine = dataLine.replaceAll( "[\u2018|\u2019]", "\u0027" ).replaceAll( "[\u201C|\u201D]", "\u005c\u0022" ); 这很好,但是当我将jar文件移植到MacOSX机器上时,我得到了三个问号,在这里我应该得到直接的撇号和

我正在Ubuntu Linux上编写一个java应用程序,它读入一个文本文件并从数据中创建一个xml文件。部分文本包含卷曲撇号和引号,我使用以下代码将其转换为直撇号和引号:

dataLine = dataLine.replaceAll( "[\u2018|\u2019]", "\u0027" ).replaceAll( "[\u201C|\u201D]", "\u005c\u0022" );

这很好,但是当我将jar文件移植到MacOSX机器上时,我得到了三个问号,在这里我应该得到直接的撇号和引号。我在Mac上创建了一个测试应用程序,使用相同的代码行进行转换,使用相同的测试文件进行输入,效果很好。为什么在Linux机器上创建的jar文件不能在Mac上正常工作?我认为java应该是跨平台兼容的。

很有可能您一开始就没有正确读取文件。您没有显示如何读取文件,但我猜您只是在使用
FileReader
,或
InputStreamReader
,而没有指定编码。在这种情况下,将使用默认的平台编码——如果这不是文件的实际编码,则无法读取正确的字符。您应该能够检测到这一点,而无需进行任何更换


相反,您应该使用
FileInputStream
并使用正确的编码将其包装在
InputStreamReader
中,因为它是XML,所以可能是UTF-8。(你应该能够很容易地检查。)

你知道
[\u2018 |\u2019]
匹配三个字符吗?“我得到三个问号”从哪里得到它们?在往返过程中,有几个地方可能会出现编码错误,当这种情况发生时,您需要隔离。猜得好。我认为OSX上默认的Java编码可能仍然是MacRoman,而不是UTF-8。