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)); + } +}