当我用Notepad ++检查我的文件时,它是ANSI编码的。我在这里做错了什么?
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), "UTF8");
try
{
out.write(text);
out.flush();
} finally
{
out.close();
}
更新:
现在已经解决了,因为jboss不理解我的xml不是编码,但它是我xml的命名。 Thanx都求救,即使确实没有任何问题......
答案 0 :(得分:2)
如果您正在创建XML文件(正如您的评论所暗示的那样),我强烈建议您使用XML库输出此并编写正确的XML编码头。否则你的字符编码将不符合XML标准,其他工具(如你的JBoss实例)会正确地抱怨。
// Prepare the DOM document for writing
Source source = new DOMSource(doc);
// Prepare the output file
File file = new File(filename);
Result result = new StreamResult(file);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
答案 1 :(得分:2)
没有明文这样的东西。问题是应用程序正在解码字符数据,而不会告诉它数据使用哪种编码。
虽然许多Microsoft应用依赖于字节顺序标记的存在来指示Unicode文件,但这绝不是标准的。 The Unicode BOM FAQ says more.
您可以通过在流的开头写入字符'\uFEFF'
来将BOM添加到输出中。 More info here。对于依赖BOM的应用程序而言,这应该足够了。
答案 2 :(得分:1)
如果没有BOM(并且Java没有为UTF8输出一个,它甚至不能识别它),只要只使用ASCII范围内的字符,文本在ANSI和UTF8编码中是相同的。因此,Notepad ++无法检测到任何差异。
(而且似乎还有issue with UTF8 in Java ......)
答案 3 :(得分:1)
在通常情况下,UTF-8被设计为与ANSI无法区分。因此,当您将文本写入文件并使用UTF-8对文本进行编码时,在常见情况下,对于打开该文件的任何其他人来说,它看起来都像ANSI。
只有当你开始进入非ASCII代码点时,情况才开始变得不同。
但在通常情况下,逐字节,ANSI和UTF-8是相同的。
答案 4 :(得分:0)
IANA注册类型为“UTF-8”,而不是“UTF8”。但是,Java应该为无效编码抛出异常,因此可能不是问题。
我怀疑记事本是个问题。使用hexdump程序检查文本,您应该看到它已正确编码。
答案 5 :(得分:0)
您是否尝试在文件开头编写BOM? BOM是唯一可以告诉编辑器文件是UTF-8的东西。否则,UTF-8文件可能看起来像Latin-1或扩展ANSI。
你可以这样做,
public final static byte[] UTF8_BOM = {(byte)0xEF, (byte)0xBB, (byte)0xBF};
...
OutputStream os = new FileOutputStream(file);
os.write(UTF8_BOM);
os.flush();
OutputStreamWriter out = new OutputStreamWriter(os, "UTF8");
try
{
out.write(text);
out.flush();
} finally
{
out.close();
}