[英]Why French characters don't work using utf-8 with Java?
我有一个带有一些法语字符的HTML文件。 我需要替换该文件中的一些字符串,所以我执行以下操作:
public static void replaceStringInFile(String filePath, String oldText, String newText)
{
try
{
Path path = Paths.get(filePath);
Charset charset = StandardCharsets.UTF_8;
String content = new String(Files.readAllBytes(path), charset);
content = content.replace(oldText, newText);
Files.write(path, content.getBytes(charset));
}
catch(Exception e)
{
e.printStackTrace();
}
}
我的琴弦被替换了,但法国角色不在那里,取而代之的是�
如果我用ISO_8859_1替换UTF_8,它就可以了。
我认为UTF_8是通用的吗? 应该和法国人合作吗? 我试图在html文件头中指定utf-8:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8"/>
....
</style>
我想了解为什么UTF_8没有保留我的法语字符......
在阅读之前,您必须知道文本文件的编码。 显然,它最初是一个没有元字符集的HTML文件。
你猜对了UTF-8。 它不是UTF-8,因为读取它检测到的字节与UTF-8不对应,因此被替换为Unicode替换字符U +FFFD ,然后使用不正确的编码显示(?),将turning转换为Mojibake“�”。
因此,您必须返回发件人/编写者以找出编码是什么。 然后你可以编写一个程序来阅读它。
我认为问题不在于utf-8不能与Java一起使用。 问题是你的文件不是utf-8。 要确认您可以运行"file -I your_file_path"
:如果您的输出类似于"your_file_name:text/plain; charset=unknown-'somenumber'bit"
,则表示它不是utf-8。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.