首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用java将字符串从一种编码解释为另一种编码。

用java将字符串从一种编码解释为另一种编码。
EN

Stack Overflow用户
提问于 2016-09-01 04:06:12
回答 3查看 1.4K关注 0票数 4

我四处寻找答案(我肯定他们在外面),但我不确定这是可能的。

所以,我得到了一个巨大的文件,里面有“f r”这个词。我使用RandomAccessFile是因为我知道它在哪里(某种程度上),因此可以使用kind()函数来实现。

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

所以我的程序终止时没有找到任何“f r”。

这是我用来得到一个词的代码:

代码语言:javascript
复制
    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‘’就变成了‘s’和‘two’?

这种猜测的原因之一是,如果我用编码UTF-8打开我的文件,那就是“f r”,但是如果我用ISO-8859-15在相同的地方打开文件,那么我们现在就有了我的getWord方法所返回的确切内容:“f

所以我的问题是:

当我和“f”和“f”坐在一起的时候,有没有办法解决这个问题?就像说“阅读”“f-8字符串”来得到“f”一样?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-01 04:43:58

代码语言:javascript
复制
import java.nio.charset.Charset;
String encodedString = new String(originalString.getBytes("ISO-8859-15"), Charset.forName("UTF-8"));
票数 -1
EN

Stack Overflow用户

发布于 2016-09-01 06:31:02

如果您必须使用RandomAccessFile,您应该先将内容读取到byte[]中,然后将完整的数组转换为String,大致如下所示:

代码语言:javascript
复制
byte[] buffer = new byte[whatever];
file.read(buffer);
String result = new String(buffer,"UTF-8");

这只是给你一个一般的印象,做什么,你将不得不增加一些长度处理等。

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

票数 3
EN

Stack Overflow用户

发布于 2016-09-01 05:35:19

您正在使用RandomAccessFile.read()。它读取单个字节。UTF-8有时对一个字符使用几个字节。

本文讨论了从RandomAccessFile中读取UTF-8的不同方法:Java:从具有缓冲输入的随机访问文件中读取字符串

如果您不一定需要一个RandomAccessFile,那么一定要切换到读取字符而不是字节。

如果可能的话,我建议默认搜索下一个单词的Scanner.next()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39262555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档