Java 未在InputStream中传递txt文件中的特殊字符
我有一个Java 未在InputStream中传递txt文件中的特殊字符,java,Java,我有一个 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("templates/createUser/new-user.txt"); 而new user.txt的内容是: 你好™ 如何使用r u® 但当它们显示在输出中时,它们显示为 你好��� 你怎么样�� 你能告诉我我应该对我的txt文件做什么更改,以便它开始相应地显示数据吗 更新 下面是代码:- 把手把手把手=新把手(); Inp
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("templates/createUser/new-user.txt");
而new user.txt
的内容是:
你好™ 如何使用r u®
但当它们显示在输出中时,它们显示为
你好��� 你怎么样��
你能告诉我我应该对我的txt文件做什么更改,以便它开始相应地显示数据吗
更新
下面是代码:-
把手把手把手=新把手();
InputStream txtInputStream=this.getClass().getClassLoader()
.getResourceAsStream(“templates/createUser/new user.txt”);
Template textmplate=handlebar.compileInline(IOUtils.toString(txtInputStream));
字符串emailText=textTemplate.apply(vars)代码>问题不在于InputStream对象。输入流只是字节流,它们不区分编码。问题是您应该将其用作您的阅读器:
Reader reader = new InputStreamReader(inputStream, "UTF-8");
与使用此相反:
Reader reader = new InputStreamReader(inputStream); // does not specify encoding
然后,您可以使用以下命令获取字符串:
String theString = IOUtils.toString(inputStream, "UTF-8");
编辑:
我不知道你在评论中发布了完整的代码。只需将第二行更改为最后一行:
Template textTemplate = handlebars.compileInline(IOUtils.toString(txtInputStream, "UTF-8"));
在哪里展示?这非常重要。内容正在传递到MailService。直到inputStream被传递到MailService时,它看起来就像™ 但一旦我看到输出邮件,它就变成了���再次定义,请参见。这是一个编码问题,所以无论您使用什么工具或技巧来查看或读取它,都可能有不正确的编码。另外,文件本身的编码是什么?™ 是unicode\u2122
,UTF-8E2 84 A2
,而®是unicode\u00AE
,UTF-8C2 AE
,所以�
将指示您的文件是UTF-8,因此请确保您读取的是UTF-8。您没有指定InputStream
如何成为字符串,因此很难说您哪里做错了。