gpt4 book ai didi

java - 在java中将字符串从一种编码解释为另一种编码

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:58 24 4
gpt4 key购买 nike

我四处寻找这个问题的答案(我确信他们在那里),但我不确定这是否可能。

所以,我得到了一个包含单词“för”的巨大文件。我使用 RandomAccessFile 是因为我知道它在哪里(有点),因此可以使用 seek() 函数到达那里。

为了知道我已经找到它,我在我的程序中有一个字符串“för”,我检查它是否相等。这就是问题所在,我运行了调试器,当我到达“för”时,我比较的是“för”。

所以我的程序在没有找到任何“för”的情况下终止。

这是我用来获取单词的代码:

    private static String getWord(RandomAccessFile file) throws IOException {
StringBuilder stb = new StringBuilder();
String word;
char c;
c = (char)file.read();
int end;
do {
stb.append(c);
end = file.read();
if(end==-1)
return "-1";
c = (char)end;

} while (c != ' ');
word = stb.toString();
word.trim();
return word;
}

所以基本上我将文件中当前点的所有字符返回到第一个 ' '-字符。所以基本上我明白了,但是因为 (char)file.read();读取一个字节(我认为),UTF-8 'ö' 变成两个字符 'Ã' 和 '¶'?

这种猜测的一个原因是,如果我用 UTF-8 编码打开我的文件,它是“för”,但如果我在同一个地方用 ISO-8859-15 打开文件,我们现在就得到了我的 getWord 方法返回的内容: "för"

所以我的问题是:

当我和“för”和“för”坐在一起时,有什么办法可以解决这个问题吗?就像说“把“för”当成 UTF-8 字符串一样读”来得到“för”?

最佳答案

如果您必须使用RandomAccessFile,您应该先将内容读入byte[],然后将整个数组转换为String - 类似以下内容:

byte[] buffer = new byte[whatever];
file.read(buffer);
String result = new String(buffer,"UTF-8");

这只是给你一个大概的印象,你必须添加一些长度处理等。

如果您从 UTF-8 序列的中间开始读取,这将无法正常工作,但任何其他方法也是如此。

关于java - 在java中将字符串从一种编码解释为另一种编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262555/

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