【发布时间】:2018-01-14 15:30:46
【问题描述】:
我有一个 .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文件中包含
Я的行的十六进制吗? -
D18F я D0AF Я-- 您询问的是大写 YA,但显示的是小写 YA。 -
第 6 行中完整字符串的十六进制:c390e2809dc391e282acc391efbfbdc390c2bdc390c2bac390c2bec390c2b2c390c2b5c391e280a0202f2044726a616e6b6f766563
-
Я 只是一个例子……还有更多未知的西里尔字符(如我的问题中所述)
-
去掉旧的实用程序类 FileReader 和 FileWriter 就好了。只是小西里尔字母 ya 似乎已损坏。你在某个地方有
new String(string.getBytes(str, ...), ...)/ 带有 0x8F 的东西吗?
标签: java mysql file encoding filereader