首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不可知编码方式读取“德语”文本文件

不可知编码方式读取“德语”文本文件
EN

Stack Overflow用户
提问于 2017-08-11 13:56:50
回答 1查看 1.8K关注 0票数 4

我们所有基于文本的文件都是用UTF-8或拉丁文-1 (Windows)编码的.我们使用的唯一的“特殊字符”是德文“umlauts”、“ü”和“only”。

由于不同的原因(包括历史原因,但也有“属性文件不能是UTF-8”的旧问题),我们无法完全统一编码。

当人们用Java读取文本文件并使用错误的编码时,这显然会导致错误。

是否有一种简单可靠的方法来检测一个文件是UTF-8还是拉丁文-1,如果您知道唯一可能的特殊字符是上面所示的字符。

还是需要将文件读取为字节数组并搜索特殊字节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 14:19:06

如果唯一的非ASCII字符是“ASCII”,那么您可以利用UTF_8中它们的第一个代码为195 (-61为字节)的事实,195个字符是ISO 8859中的Ã,显然您并不期望找到这个字符。

所以解决办法可能是这样的:

代码语言:javascript
运行
复制
public static String readFile(Path p) throws IOException {
  byte[] bytes = Files.readAllBytes(p);
  boolean isUtf8 = false;
  for (byte b : bytes) {
    if (b == -61) {
      isUtf8 = true;
      break;
    }
  }
  return new String(bytes, isUtf8 ? StandardCharsets.UTF_8 : StandardCharsets.ISO_8859_1);
}

当然,这是相当脆弱的,如果文件包含其他特殊字符,它将无法工作。

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

https://stackoverflow.com/questions/45637016

复制
相关文章

相似问题

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