- 210
- 1
- 19
Чтобы копировать готовый "файл настроек" (UTF-8 без BOM) из JAR-файла своего мода в папку мира, сделал такой код:
Потом вывожу строку из этого файла таким образом:
В итоге весь русский текст в конечном файле превратился в кракозябры - это видно и через блокнот и при попытке вывода содержимого файла в чат игры.
Если в первом блоке в строке:
убрать параметр кодировки, оставив так:
то в моём файле всё становится нормально.
Если теперь убрать "UTF-8" из второго блока, то уже на этом этапе русский текст превращается в кракозябры, то есть в файле он нормальный, а в чате - хрень. Если пробовать подставлять вместо "UTF-8" слово "ISO-8859-1", то вообще не кракозябры, а знаки вопроса.
По идее проблему я решил, но очень интересно, если кто знает, объясните суть явления.
Да, и ещё остался нюанс: везде, где встречается буква "И" (заглавная), она превратилась в хрень вот так:
Я просто все фразы, где встречается эта буква, изменил так, чтобы её там не было. Но почему именно она? И почему только она?
И ещё вопрос: есть ли другой способ скопировать свой файл, кроме использованного мною? (я скопировал построчно, получается)
Java:
private static boolean collectDefaultConfig(String name) {
String path = DimensionManager.getCurrentSaveRootDirectory().getAbsolutePath() + "/RHA/" + name + ".rha";
try {
BufferedReader inputStream = new BufferedReader(new InputStreamReader(Main.class.getClassLoader().getResourceAsStream("assets/rha/" + name + ".rha")));
BufferedOutputStream file = new BufferedOutputStream(new FileOutputStream(path, true));
String line = "";
do {
try { line = inputStream.readLine();} catch (IOException EndOfFile){break;}
if(line != null && line.length() > 0){file.write((line + "\n").getBytes("UTF-8"));}
} while (line != null);
inputStream.close();
file.flush();
file.close();
System.out.println("File " + name + " grabbed from JAR successfully.");
return true;
} catch (Exception e) { e.printStackTrace(); return false;}
}
Потом вывожу строку из этого файла таким образом:
Java:
public static String getQuote(String filename, Random rnd) {
String errorline = "Error.";
String path = DimensionManager.getCurrentSaveRootDirectory().getAbsolutePath() + "/RHA/" + filename + ".rha";
if(!checkConfigFileExistance(filename))return errorline + " File " + path + " isn't available.";
try {
List<String> alllines = new ArrayList<String>();
BufferedReader quotefile = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
String stamp = "";
do {
try {stamp = quotefile.readLine();} catch (IOException EndOfFile){break;}
if(stamp == null)continue;
if(stamp.length() < 2)continue;
if(stamp.substring(0, 2).equalsIgnoreCase("//"))continue;
alllines.add(stamp);
} while (stamp != null);
quotefile.close();
if(alllines.size() == 0)return "List is empty.";
if(alllines.size() == 1)return alllines.get(0);
return alllines.get(MathHelper.getRandomIntegerInRange(rnd, 0, alllines.size() - 1));
} catch (Exception e) {e.printStackTrace(); return errorline;}
}
В итоге весь русский текст в конечном файле превратился в кракозябры - это видно и через блокнот и при попытке вывода содержимого файла в чат игры.
Если в первом блоке в строке:
Java:
if(line != null && line.length() > 0){file.write((line + "\n").getBytes("UTF-8"));}
Java:
if(line != null && line.length() > 0){file.write((line + "\n").getBytes());}
Если теперь убрать "UTF-8" из второго блока, то уже на этом этапе русский текст превращается в кракозябры, то есть в файле он нормальный, а в чате - хрень. Если пробовать подставлять вместо "UTF-8" слово "ISO-8859-1", то вообще не кракозябры, а знаки вопроса.
По идее проблему я решил, но очень интересно, если кто знает, объясните суть явления.
Да, и ещё остался нюанс: везде, где встречается буква "И" (заглавная), она превратилась в хрень вот так:
Я просто все фразы, где встречается эта буква, изменил так, чтобы её там не было. Но почему именно она? И почему только она?
И ещё вопрос: есть ли другой способ скопировать свой файл, кроме использованного мною? (я скопировал построчно, получается)