将 .txt 转换为 .sql 文件后编码错误

Wrong Encoding after Converting .txt to .sql File

我有一个 .txt 文件,其中包含数百万个邮政编码。 都是格式良好(可读)的。 我的目标是将邮政编码导入 MySql-数据库。
我需要将邮政编码从 .txt 文件转换为 .sql 文件.

我写了一个 Java 应用程序来将重要部分转换成 SQL-文件。

编辑: .txt 文件包含许多信息。这就是为什么我要读取文件(在 Java 中),过滤文件内容并最终创建一个 .sql 文件。非常感谢用 "Python, SQL, C++, BrainF***" 或其他语言编写的任何解决方案,但我希望能为我的特定 Java 代码提供解决方案。 .txt 文件使用 UTF-8 编码。

转换成“.sql”后,内容有几个问题。 例如,西里尔字符“Я”在 SQL-文件中不是“known”。 我假设编码错误。
如果有人可以帮助我了解如何解决此问题,那就太好了。

TXT 文件: TXT-File

SQL-文件:SQL-File

try (BufferedReader br = new BufferedReader(
            new FileReader(GeoData.class.getResource(sourceFilenameInput.getText().trim()).getFile().trim()))) {
        for (String line; (line = br.readLine()) != null;) {
            GeoData geoData = new GeoData();
            geoData.addOrt(getPlaceFromFile(line));
        }

getPlaceFromFile 方法:

private String getPlaceFromFile(String line) {
    String[] placeHolder = line.split("\t");
    if (placeHolder .length > 2) {
        for (int i = 0; i < placeHolder .length - 2; i++) {
            if (!placeHolder [i + 2].trim().isEmpty() && placeHolder [i + 2].trim().length() > 3) {
                return filterPlace(placeHolder [i + 2].trim(), "'", "\", "^", ";", "*", "|");
            }
        }
    }
    return "EMPTY";
}

FilterPlace 方法:

private String filterPlace(String place, String... filter) {
    String newPlace = place;
    for (String string : filter) {
        if (newPlace .trim().contains(string))
            newPlace = newPlace .trim().replace(string, " ");
    }
    return newPlace;
}

到目前为止我尝试了什么?
我将 FileReader 替换为 InputStreamReader,并将 FileInputStream 与字符集 UTF-8 一起使用。以 UTF-8 格式转换后,SQL-文件如下所示:
UTF8 Converted SQL-FILE

如果 .txt 列在 \t 上拆分,请不要在加载前进行转换。而是简单地使用 LOAD DATA INFILE ... SQL 语句,比如

 LOAD DATA LOCAL INFILE 'the_file.txt'
     INTO tablename
     CHARACTER SET utf8mb4
     COLUMNS TERMINATED BY "\t"
     LINES TERMINATED BY "\n"
     (col1, zip, name);

我不知道如何 运行 来自 Java 的内容。但是应该需要 none 您提供的代码。

您的评论有些垃圾 --

E2808B     8203=x200B  [​]   BN  ZERO WIDTH SPACE
E2808C     8204=x200C  [‌]   BN  ZERO WIDTH NON-JOINER

(我是双击十六进制复制出来的,结果中途停了!)

Д 是十六进制 D094,但是如果你 它,你会得到十六进制 C390 E2809D。请参阅 link 了解可能的原因。

我找到了答案。

我刚刚从 eclipse 编辑了编码格式来解决这个问题。

Workspace > Preferences > General > 单击 Workspace 并将 Text file encodingCp1252 编辑为 UTF-8 .

就这些了,它起作用了。