java - 为什么法语字符不能在 Java 中使用 utf-8?

标签 java html file-io utf-8 character

我有一个 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/

相关文章:

java - 使用 JRAT Java 运行时分析工具包分析简单的 java 程序

html - 如何让插入符与文本对齐

c - 地址预订并写入文件

c - 如何使用 scanf\fscanf 读取一行并解析成变量?

java - 如何使用 Spring Boot Hibernate 将 XML 字符串保存在 Postgresql 表的 XML 类型列中

java - 允许缺少 if/循环体 : example?

HTML DIVS 随内容动态扩展?

javascript - 无法使用 jQuery 定位多个单词

Java:如何读取文本文件

java 设置条件以某个枚举值开始