【新增】 读取C语言文件乱码问题
This commit is contained in:
@@ -86,6 +86,13 @@
|
|||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.juniversalchardet</groupId>
|
||||||
|
<artifactId>juniversalchardet</artifactId>
|
||||||
|
<version>1.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- 工具类相关 -->
|
<!-- 工具类相关 -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@@ -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.EducationPaperTask;
|
||||||
import pc.exam.pp.module.exam.dal.dataobject.ExamQuestion;
|
import pc.exam.pp.module.exam.dal.dataobject.ExamQuestion;
|
||||||
import pc.exam.pp.module.exam.service.question.IExamQuestionService;
|
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 pc.exam.pp.module.system.enums.common.SexEnum;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -295,7 +296,11 @@ public class ExamQuestionController {
|
|||||||
if (!file.getFile().getOriginalFilename().endsWith(".c")) {
|
if (!file.getFile().getOriginalFilename().endsWith(".c")) {
|
||||||
return CommonResult.error(100810, "请上传.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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user