gpt4 book ai didi

Java file.encoding 读取 UTF-8 文件并处理 UTF-8 字符串

转载 作者:行者123 更新时间:2023-12-01 12:45:11 26 4
gpt4 key购买 nike

我正在尝试读取 UTF-8 编码的 XML 文件并将 UTF-8 字符串传递给 native 代码(C++ dll)

我的问题最好用示例程序来解释

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class UniCodeTest {

private static void testByteConversion(String input) throws UnsupportedEncodingException {

byte[] utf_8 = input.getBytes("UTF-8"); // convert unicode string to UTF-8
String test = new String(utf_8); // Build String with UTF-8 equvalent chars
byte[] utf_8_converted = test.getBytes();// Get the bytes: in effect this will be called in JNI wrapper on C++ side to read it in char*

// simple workaround to print hex values
String utfString = "";
for (int i = 0; i < utf_8.length; i++) {
utfString += " " + Integer.toHexString(utf_8[i]);
}

String convertedUtfString = "";
for (int i = 0; i < utf_8_converted.length; i++) {
convertedUtfString += " " + Integer.toHexString(utf_8_converted[i]);
}
if (utfString.equals(convertedUtfString)) {
System.out.println("Success" );
}
else {
System.out.println("Failure" );
}
}

public static void main(String[] args) {
try {
File inFile = new File("c:/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(inFile), "UTF8"));
String str;
while ((str = in.readLine()) != null) {
testByteConversion(str);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}

并且测试文件已以 UTF-8 格式存储(泰米尔语区域设置)

#just test
நனமை
நன்மை

我做了以下实验:

  1. 将 file.encoding 属性设置为“UTF-8”我的两个输入都取得了成功

  2. 当我将 file.encoding 设置为“CP-1252”时第一个输入,我得到“成功”,第二个输入我得到“失败”

这是我得到的失败案例

utf_8           :  e0 ae a8 e0 ae a9 e0 af 8d e0 ae ae e0 af 88
utf_8_converted : e0 ae a8 e0 ae a9 e0 af 3f e0 ae ae e0 af 88

我不明白为什么当 file.encoding 设置为 CP-1252 时,8d 会转换为 3f。谁能帮我解释一下

我错过了 file.encoding 和字符串操作之间的链接

提前致谢:)

最佳答案

我只是斜读了你的帖子,但这是一个奇怪的步骤:

byte[] utf_8 = input.getBytes("UTF-8");  // convert unicode string to UTF-8
String test = new String(utf_8);

因为你在java中获取一个字符串(这是一个与编码无关的unicode代码点列表),将其转换为具有给定编码(UTF-8)的字节,但然后你构造一个新的字符串而不指定编码,所以在效果测试现在包含使用系统编码转换的 utf-8 字节,这可能是也可能不是有效结果,具体取决于您在字符串中放入的内容以及您拥有的系统编码。

在下一步中,您将再次从默认编码中“测试”的可怕实体中获取字节。假设它甚至有效(因为原始 UTF-8 字符串中的字节在您拥有的任何系统编码中都是有效的字节数组),下一步基本上是无用的举动,因为它将使用您用于构造测试的相同系统编码:

byte[] utf_8_converted = test.getBytes();

关于Java file.encoding 读取 UTF-8 文件并处理 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24773332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com