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

如何在Java中读写时强制使用UTF-16?

冯浩旷
2023-03-14
问题内容

我看到您可以通过将UTF-16指定为字符集Charset.forName("UTF-16"),并且可以通过创建一个新的UTF-16解码器Charset.forName("UTF-16").newDecoder(),但是我只能看到指定CharsetDecoderon
InputStreamReader的构造函数的功能。

在读取Java中的任何流时,如何指定如何使用UTF-16?


问题答案:

输入流处理原始字节。当您直接从输入流中读取内容时,所得到的只是字符集无关的原始字节。

根据定义,将原始字节解释为字符需要某种转换:如何将原始字节转换为可读的字符串?“翻译”以字符集的形式出现。

此“添加”层由读者实现。因此,要从流中读取字符(而不是字节),您需要Reader在流的顶部构造某种类型(取决于您的需要)的a。例如:

InputStream is = ...;
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16"));

这将导致reader.read()使用您指定的字符集读取字符。如果您想阅读整行,请BufferedReader在顶部使用:

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16")));
String line = reader.readLine();


 类似资料:
  • 问题内容: 我必须创建许多非常相似的类,它们之间只有一种方法不同。因此,我认为创建抽象类将是实现此目标的好方法。但是我要覆盖的方法(例如,方法foo())没有默认行为。我不想保留任何默认实现,而是强制所有扩展类都实现此方法。我该怎么做呢? 问题答案: 您需要在基类上使用 抽象 方法: 这样,您无需指定默认行为 , 而是可以强制从继承的非抽象类指定的实现。

  • 我想使用ArchUnit来强制使用SLF4J日志框架,避免使用简单的系统。out调用。此外,我希望避免使用任何其他日志框架。我该如何实施此类检查? 目前我写了这个测试 但它实际上并没有强制SLF4J的使用,只是限制的使用,并防止依赖于类(实际上常量所在的位置)。 是否是我的案例更优雅的解决方案?

  • 问题内容: 我正在尝试为Express.js创建一个中间件,以将所有非安全(端口80)通信重定向到安全SSL端口(443)。不幸的是,Express.js请求中没有任何信息可让您确定该请求是否来自http或https。 一种解决方案是重定向 每个 请求,但这不是我的选择。 笔记: 没有可能用Apache或其他东西来处理它。它 必须 在节点中完成。 应用程序中只能启动 一台 服务器。 您将如何解决?

  • 问题内容: 我有一些当前代码,问题是它创建了一个1252代码页文件,我想强制它创建一个UTF-8文件 任何人都可以通过此代码帮助我,因为我说它当前可以工作…但是我需要强制保存utf ..我可以传递参数或其他东西吗? 这就是我所拥有的,任何帮助我都感激不尽 问题答案: 而不是使用,创建一个。然后,你可以将其包装在中,以允许你在构造函数中传递编码。然后,你可以将数据写入语句中:

  • 问题内容: 我无法使用Android API示例中显示的标准InputStreamReader方法在文本文件中读取和写入扩展字符(例如,法语重音字符)。当我使用以下方法读回文件时: 读取的字符串在扩展字符处而不是在行尾处被截断。然后,字符串的后一半进入下一行。我以为我需要将数据持久化为UTF-8,但是我找不到任何示例,而且我是Java的新手。 谁能为我提供示例或相关文档的链接? 问题答案: 非常简

  • 我试图让两个连字符触发短破折号,三个连字符触发长破折号;喜欢 除了工作。以下是我的收获: 这部作品(11部产生2111部产生3部) 这是同一个脚本,但“1”已被替换为“-”,“2”已被替换为“-”,而“3”已被替换为“-“--”-“应该生成”-“和“--”应该生成”-”,但它不起作用,因为我使用的版本中不完全支持Unicode(AutoHotKey.com上的AutoHotKey_L v1.1.0