在Java中将字符串验证为UTF-8

在Java中将字符串验证为UTF-8,java,utf-8,Java,Utf 8,我需要一些帮助来验证用Java编码的UTF-8字符串 我正在处理一些Excel表格并将其转换为XML文档,当我尝试验证该XML文档时,我得到了一个“1字节UTF-8序列中的无效字节1”。我在这里验证它:。我追查到了这一点,并由此得出: 指示的字符是此撇号”,它不同于此撇号“ 我想我要问的是,是否有某种类,给定一个字符串,它会用UTF-8字符替换所有非UTF-8字符,如下所示: stringmagicalfunction(stringstringtofix)忘记“字符串编码”的概念吧,Java内部

我需要一些帮助来验证用Java编码的UTF-8字符串

我正在处理一些Excel表格并将其转换为XML文档,当我尝试验证该XML文档时,我得到了一个“1字节UTF-8序列中的无效字节1”。我在这里验证它:。我追查到了这一点,并由此得出: 指示的字符是此撇号
,它不同于此撇号

我想我要问的是,是否有某种类,给定一个字符串,它会用UTF-8字符替换所有非UTF-8字符,如下所示:
stringmagicalfunction(stringstringtofix)

忘记“字符串编码”的概念吧,Java内部存储字符的方式并不重要,因为您无法修改它。这里的问题是如何将它们存储在文件中:使用String.getBytes(“UTF-8”)和OutputStream来写入这些字节,这样可以确保文件是UTF-8。 Writer始终使用操作系统的默认编码,因此您不能使用FileWriter。
您可以在本页右侧的相关问题中找到更多信息,类似逗号的引号是非ASCII的,错误意味着XML不能读取为UTF-8。 那么XML文本可能是Windows拉丁语-1,又称Windows-1252

检查XML文件:

<?xml version="1.0" encoding="Windows-1252"?>
OutputStreamWriter将二进制字节(OutputStream)转换为文本编写器(java字符串)。为此,它使用给定的编码。这个编码参数是可选的(有一个不带编码的较短构造函数),就像JavaAPI中的许多其他地方一样。然后使用平台的默认编码。因此,这些文件不会跨平台


不幸的是,经常使用的便利类FileWriter和FileReader甚至完全没有编码参数。然后,这些超级类使用平台编码。

您是否尝试过查看相关问题(右侧的链接)?Java字符串是UTF-16-始终如此。问题可能在于如何将它们转换为UTF-8,因此请发布用于创建XML文档的代码。
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(file), "UTF.8"));