当前位置: 首页 > 面试题库 >

Java:如何确定流的正确字符集编码

廖夜洛
2023-03-14
问题内容

以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么?

我尝试使用以下方法:

File in =  new File(args[0]);
InputStreamReader r = new InputStreamReader(new FileInputStream(in));
System.out.println(r.getEncoding());

但是在我知道要用ISO8859_1编码的文件上,上面的代码会产生ASCII,这是不正确的,并且不允许我将文件的内容正确地呈现回控制台。


问题答案:

无法确定任意字节流的编码。这就是编码的本质。编码是指字节值与其表示形式之间的映射。因此,每种编码“都可以”是正确的。

的getEncoding()方法将返回其设置(读取的编码的JavaDoc),用于该流。它不会为你猜测编码。

一些流告诉你使用哪种编码来创建它们:XML,HTML。但不是任意字节流。

无论如何,如果需要,你可以尝试自己猜测一个编码。每种语言的每个字符都有相同的频率。在英语中,字符经常出现,但是ê很少出现。在ISO-8859-1流中,通常没有0x00字符。但是UTF-16流有很多。

或者:你可以询问用户。我已经看到过一些应用程序,这些应用html" target="_blank">程序以不同的编码形式为你提供该文件的摘要,并要求你选择“正确的”文件。



 类似资料:
  • 我编写了一个方法,该方法应该在utf-8中以字符串类型返回有效的正文,但在发出请求后,我在UTF-16中得到响应。postman中的内容类型头是application/json。我在stackoverflow中搜索任何可能的解决方法,但任何解决方案都无济于事,包括这个主题(.我如何更改它以获得有效的主体?Thanx!

  • 问题内容: 我正在用Java编程 我的代码为: 在api中指定,如果不指定字符编码,它将采用默认的平台字符编码。 “默认平台字符编码”是什么意思? 它是Java编码还是OS编码? 如果这意味着操作系统编码,如何检查Windows和Linux的默认字符编码?无论如何,我们可以使用命令行获取默认的字符编码吗? 问题答案: 这表示您正在运行的JVM的默认字符编码, 要检查默认编码,您可以执行以下操作:

  • 问题内容: 使用场景 我们已经实现了一个Web服务,我们的Web前端开发人员在内部使用了该服务(通过php API)来显示产品数据。用户在网站上输入内容(即查询字符串)。在内部,网站通过api调用服务。 注意:我们使用restlet,而不是tomcat 原始问题 Firefox 3.0.10似乎尊重浏览器中选择的编码,并根据选择的编码对URL进行编码。这确实会导致ISO-8859-1和UTF-8的

  • 我已经使用java流实现了这个breadthFirstSearch算法。首先,我过滤检查顶点是否被标记,然后如果它没有被标记,我将它添加到队列中。当我使用.map时,我需要用一个类似.collect(Collectors.ToList())的终止操作结束。 我的问题是这看起来不对,因为我正在使用collect返回一个新的过滤顶点列表。在这种情况下,我应该使用什么终端操作?我不需要收集新名单。我只想

  • 在我的CentOS7工作站上,我有elasticsearch(ver.5.5.1)服务,按映像:docker.elastic.co/elasticsearch/elasticsearch:5.5.1。 我的工作站上的文件系统类型是XFS。 我有.tar存档文件/usr/share/elasticsearch/data/nodes/0/包含索引结构:(来自kibana的JSON) 开始记录我的JVM

  • 问题内容: 如何检查字符串是否已经编码? 例如,如果我编码,我得到。如果我再次对最后一个字符串进行编码,我会得到,如果这样做,我必须先知道它是否已经被编码… 我已经保存了编码参数,我需要搜索它们。我不知道输入参数是什么,要编码还是不编码,所以我必须知道在搜索之前是否必须对它们进行编码或解码。 问题答案: 解码,与原始图像进行比较。如果确实不同,则对原稿进行编码。如果没有区别,则原始文件不会被编码。