From a74bd10f029b6a19fd4227460e789a5ae29b9c6c Mon Sep 17 00:00:00 2001 From: dlaren Date: Wed, 20 Aug 2025 22:16:38 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=20?= =?UTF-8?q?=E8=AF=BB=E5=8F=96C=E8=AF=AD=E8=A8=80=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exam-module-exam/exam-module-exam-biz/pom.xml | 7 +++++ .../question/ExamQuestionController.java | 7 ++++- .../exam/utils/charset/CharsetUtils.java | 30 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/utils/charset/CharsetUtils.java diff --git a/exam-module-exam/exam-module-exam-biz/pom.xml b/exam-module-exam/exam-module-exam-biz/pom.xml index 06bc530f..04f83b88 100644 --- a/exam-module-exam/exam-module-exam-biz/pom.xml +++ b/exam-module-exam/exam-module-exam-biz/pom.xml @@ -86,6 +86,13 @@ test + + com.googlecode.juniversalchardet + juniversalchardet + 1.0.3 + + + diff --git a/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/controller/admin/question/ExamQuestionController.java b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/controller/admin/question/ExamQuestionController.java index 9091b853..15bc1402 100644 --- a/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/controller/admin/question/ExamQuestionController.java +++ b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/controller/admin/question/ExamQuestionController.java @@ -29,6 +29,7 @@ import pc.exam.pp.module.exam.controller.admin.questionexamine.vo.QuestionExamin import pc.exam.pp.module.exam.dal.dataobject.EducationPaperTask; import pc.exam.pp.module.exam.dal.dataobject.ExamQuestion; import pc.exam.pp.module.exam.service.question.IExamQuestionService; +import pc.exam.pp.module.exam.utils.charset.CharsetUtils; import pc.exam.pp.module.system.enums.common.SexEnum; import java.io.IOException; @@ -295,7 +296,11 @@ public class ExamQuestionController { if (!file.getFile().getOriginalFilename().endsWith(".c")) { return CommonResult.error(100810, "请上传.c文件"); } - return CommonResult.success(new String(file.getFile().getBytes(), "GBK")); + + byte[] bytes = file.getFile().getBytes(); + String content = CharsetUtils.detectAndRead(bytes); + + return CommonResult.success(content); } } diff --git a/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/utils/charset/CharsetUtils.java b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/utils/charset/CharsetUtils.java new file mode 100644 index 00000000..4b3f4517 --- /dev/null +++ b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/utils/charset/CharsetUtils.java @@ -0,0 +1,30 @@ +package pc.exam.pp.module.exam.utils.charset; + +import org.mozilla.universalchardet.UniversalDetector; + +import java.io.IOException; +import java.nio.charset.Charset; + +public class CharsetUtils { + + /** + * 自动识别文件编码,并返回字符串内容 + * @param bytes 文件字节数组 + * @return 文件内容 + */ + public static String detectAndRead(byte[] bytes) throws IOException { + // 1. 检测编码 + UniversalDetector detector = new UniversalDetector(null); + detector.handleData(bytes, 0, bytes.length); + detector.dataEnd(); + String detectedCharset = detector.getDetectedCharset(); + + // 2. 默认回退 UTF-8 + if (detectedCharset == null) { + detectedCharset = "UTF-8"; + } + + // 3. 转换为字符串 + return new String(bytes, Charset.forName(detectedCharset)); + } +}