gpt4 book ai didi

java - 仅在构建 jar 后解析字符串的字符编码是错误的

转载 作者:行者123 更新时间:2023-12-02 09:59:10 24 4
gpt4 key购买 nike

我正在编写一个程序,可以生成可打印考试的 PDF 文件。我将所有考试问题存储在 JSON 文件中。问题是考试是用捷克语进行的,因此有很多特殊字符(特别是 ěščřžýáíé)。当我在 Idea 中运行该程序时,它运行良好 - 输出与预期的完全一样。

但是当我构建 jar 可执行文件时,生成的文件包含大量错误的编码文本。特别是任何经过 JSON 解析器的内容。所有硬编码(如 header 等)都已正确编码,因此错误一定出在解析器中。

JSON 输入文件以 UTF-8 编码。

我使用这两种方法来解析JSON文件。

    private static Category[] parseJSON(){
JSONParser jsonParser = new JSONParser();
Category[] categories = new Category[0];

try (FileReader reader = new FileReader("otazky.json")){
// Read JSON file
Object obj = jsonParser.parse(reader);

JSONArray categoryJSONList = (JSONArray) obj;
java.util.List<JSONObject> categoryList = new ArrayList<>(categoryJSONList);
categories = new Category[categoryJSONList.size()];

int i = 0;
for (JSONObject category : categoryList) {
categories[i] = parseCategoryObject(category);
i++;
}
} catch (ParseException | IOException e) {
e.printStackTrace();
}
return categories;
}

private static Category parseCategoryObject(JSONObject category) {
String categoryName = (String) category.get("name");

int generateCount = (int) (long) category.get("generateCount");

JSONArray questionsJSONArray = (JSONArray) category.get("questions");

java.util.List<JSONObject> questionJSONList = new ArrayList<>(questionsJSONArray);
Question[] questions = new Question[questionJSONList.size()];
int j = 0;

for (JSONObject question : questionJSONList) {
JSONArray answers = (JSONArray) question.get("answers");
String s = (String) question.get("question");
String[] a = new String[answers.size()];

for (int i = 0; i < answers.size(); i++) {
a[i] = answers.get(i).toString();
}

int c = (int) (long) question.get("correct");
Question q = new Question(s, a, c);
questions[j] = q;
j++;
}

return new Category(categoryName, questions, generateCount);
}

输出如下所示:

...
PrávnĂ 规范:
a) je obecnĂzávaznĂ© pravidlo chovánĂ, kterĂ© nemusĂ mĂt urĂŤitou formu,
b) nemĹŻĹľe bĂ˝t souäŤĂˇstĂ právnĂho pĹ™edpisu,
...

虽然我需要它看起来像这样:

...
Právní 规范:
a) je obecně závazné pravidlo chování, které nemusí mít určitou formu,
b) nemůže být součástí právního předpisu,
...

最佳答案

Benjamin Urquhart 建议我尝试使用 InputStringReaderFileInputStream 而不是 FileReader 来读取文件,因为使用 FileReader code> 不能指定编码(使用系统默认值)。我发现这两种方法很难使用,但我找到了一种替代方法 - Files.readAllLines,它相当容易使用,并且有效。

关于java - 仅在构建 jar 后解析字符串的字符编码是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55764289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com