我有一个 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 � ,然后您使用不正确的编码显示 (?),将 � 变成 Mojibake“�”。
因此,您必须回到发件人/作者那里才能找出编码是什么。然后你可以编写一个程序来读取它。
关于java - 为什么法语字符不能在 Java 中使用 utf-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285219/