当前位置: 首页 > 知识库问答 >
问题:

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

岳永思
2023-03-14

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

所以,我得到了一个包含“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)文件。read();读一个字节(我想),UTF-8的“ö”变成了两个字符“Ô和“戡”?

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

所以我的问题是:

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

共有3个答案

蒙洛华
2023-03-14
import java.nio.charset.Charset;
String encodedString = new String(originalString.getBytes("ISO-8859-15"), Charset.forName("UTF-8"));
麹承
2023-03-14

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

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

如果你不一定需要一个随机存取文件,你一定要切换到读取字符而不是字节。

如果可能的话,我建议使用扫描仪。next()默认情况下搜索下一个单词。

甄永年
2023-03-14

如果必须使用随机访问文件,则应首先将内容读入字节[],然后将整个数组转换为字符串——如下所示:

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

这只是给你一个大致的印象,你需要增加一些长度处理等。

如果您在UTF-8序列中开始阅读,那么这将无法正常工作,但其他方法也是如此。

 类似资料:
  • 问题内容: 就像标题所说的那样,我正在尝试在Java中将字符串“ test”编码为base32字符串“ ORSXG5A =“。 我在网上搜索时发现的所有类都是使用32位从字符串编码为数组的类,但是显然这不是我想要的。 很抱歉这个新手问题。 问题答案: Apache commons编解码器提供了一个可以执行此操作的类 版画 您可以在此处下载。

  • 我有个问题。我试图将包含日期的字符串解析为另一种日期格式。代码: 错误消息: 请帮助。:)

  • 人们可以称之为语言转移,但这听起来不太专业。在这个特定的案例中,我写的是将程序从Java转移到Python,如果这与答案相关的话。

  • 问题内容: 现在,我正在尝试找到一种方法,将数字从Java中的一个基数转换为另一个基数,给定一个数字,该数字所在的基数以及要转换为的基数。 我找到了JavaScript的解决方案,并且想知道是否可以在Java中执行类似的操作: 问题答案: 你可以做 因此,使用您的函数签名,在Java中:

  • 问题内容: 我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用: 如何将该字符串编码为utf-8? 问题答案: Java中的对象使用无法修改的UTF-16编码。 唯一可以使用不同编码的是。因此,如果你需要UTF-8数据,则需要一个。如果你有一个包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a (即

  • 我有一个用mvn Exec:java运行的程序(我的主文件是用utf-8编码的,系统的默认字符集是windows-1252) 我不明白为什么第一次打印工作,根据文档getBytes使用给定的字符集将字符串编码成字节序列,字符串构造函数通过使用平台的默认字符集解码指定的字节数组来构造新的字符串