From 8a931725bfdfa6babd5129fadc5708232e66f68e Mon Sep 17 00:00:00 2001 From: songdragon Date: Thu, 24 Aug 2023 23:08:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20#I7VP0I=20=E9=81=8D=E5=8E=86=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=BC=96=E7=A0=81=E6=97=B6=EF=BC=8C=E5=8F=96=E6=A6=82?= =?UTF-8?q?=E7=8E=87=E7=9B=B8=E5=90=8C=EF=BC=8C=E4=BD=86=E6=9C=80=E5=85=88?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcnc/jnotepad/tool/EncodingDetector.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java index dc0fac6..b601e40 100644 --- a/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java +++ b/src/main/java/org/jcnc/jnotepad/tool/EncodingDetector.java @@ -23,6 +23,10 @@ import static org.jcnc.jnotepad.constants.TextConstants.UNKNOWN; public class EncodingDetector { private static final Logger LOG = LogUtil.getLogger(EncodingDetector.class); + /** + * 编码侦测概率,阈值:50% + */ + public static final int THRESHOLD_CONFIDENCE = 50; private EncodingDetector() { @@ -39,10 +43,20 @@ public class EncodingDetector { try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file.getPath()))) { charsetDetector.setText(inputStream); CharsetMatch[] matchList = charsetDetector.detectAll(); - for (CharsetMatch match : matchList) { + if (matchList == null || matchList.length == 0) { + return UNKNOWN; + } + CharsetMatch maxConfidence = matchList[0]; + if (maxConfidence.getConfidence() < THRESHOLD_CONFIDENCE) { + return UNKNOWN; + } + for (int i = 1; i < matchList.length; i++) { + CharsetMatch match = matchList[i]; LOG.debug("{} : {}", match.getName(), match.getConfidence()); - if (match.getConfidence() > 50) { - return match.getName(); + if (match.getConfidence() >= THRESHOLD_CONFIDENCE && match.getConfidence() >= maxConfidence.getConfidence()) { + maxConfidence = match; + } else { + return maxConfidence.getName(); } } } catch (Exception e) {