将 .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 encoding
从 Cp1252
编辑为 UTF-8
.
就这些了,它起作用了。
我有一个 .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 encoding
从 Cp1252
编辑为 UTF-8
.
就这些了,它起作用了。