From 67cb374d6e5d27444f34dd007a20b85e3acf8739 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期五, 22 四月 2022 13:06:13 +0800
Subject: [PATCH] 优化 权限 提示 多语言版本
---
java110-generator/src/main/java/com/java110/code/util/UnicodeReader.java | 134 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 134 insertions(+), 0 deletions(-)
diff --git a/java110-generator/src/main/java/com/java110/code/util/UnicodeReader.java b/java110-generator/src/main/java/com/java110/code/util/UnicodeReader.java
new file mode 100755
index 0000000..7ef5c3e
--- /dev/null
+++ b/java110-generator/src/main/java/com/java110/code/util/UnicodeReader.java
@@ -0,0 +1,134 @@
+package com.java110.code.util;
+
+/**
+version: 1.1 / 2007-01-25
+- changed BOM recognition ordering (longer boms first)
+
+
+Original pseudocode : Thomas Weidenfeller
+Implementation tweaked: Aki Nieminen
+
+
+http://www.unicode.org/unicode/faq/utf_bom.html
+BOMs:
+ 00 00 FE FF = UTF-32, big-endian
+ FF FE 00 00 = UTF-32, little-endian
+ EF BB BF = UTF-8,
+ FE FF = UTF-16, big-endian
+ FF FE = UTF-16, little-endian
+
+
+Win2k Notepad:
+ Unicode format = UTF-16LE
+***/
+
+
+import java.io.*;
+
+
+/**
+* Generic unicode textreader, which will use BOM mark
+* to identify the encoding to be used. If BOM is not found
+* then use a given default or system encoding.
+*/
+public class UnicodeReader extends Reader {
+ PushbackInputStream internalIn;
+ InputStreamReader internalIn2 = null;
+ String defaultEnc;
+
+
+ private static final int BOM_SIZE = 4;
+
+
+ /**
+ *
+ * @param in inputstream to be read
+ * @param defaultEnc default encoding if stream does not have
+ * BOM marker. Give NULL to use system-level default.
+ */
+ public UnicodeReader(InputStream in, String defaultEnc) {
+ internalIn = new PushbackInputStream(in, BOM_SIZE);
+ this.defaultEnc = defaultEnc;
+ }
+
+
+ public String getDefaultEncoding() {
+ return defaultEnc;
+ }
+
+
+ /**
+ * Get stream encoding or NULL if stream is uninitialized.
+ * Call init() or read() method to initialize it.
+ */
+ public String getEncoding() {
+ if (internalIn2 == null) return null;
+ return internalIn2.getEncoding();
+ }
+
+
+ /**
+ * Read-ahead four bytes and check for BOM marks. Extra bytes are
+ * unread back to the stream, only BOM bytes are skipped.
+ */
+ protected void init() throws IOException {
+ if (internalIn2 != null) return;
+
+
+ String encoding;
+ byte bom[] = new byte[BOM_SIZE];
+ int n, unread;
+ n = internalIn.read(bom, 0, bom.length);
+
+
+ if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
+ (bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
+ encoding = "UTF-32BE";
+ unread = n - 4;
+ } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
+ (bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
+ encoding = "UTF-32LE";
+ unread = n - 4;
+ } else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
+ (bom[2] == (byte)0xBF) ) {
+ encoding = "UTF-8";
+ unread = n - 3;
+ } else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
+ encoding = "UTF-16BE";
+ unread = n - 2;
+ } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
+ encoding = "UTF-16LE";
+ unread = n - 2;
+ } else {
+ // Unicode BOM mark not found, unread all bytes
+ encoding = defaultEnc;
+ unread = n;
+ }
+ //System.out.println("read=" + n + ", unread=" + unread);
+
+
+ if (unread > 0) internalIn.unread(bom, (n - unread), unread);
+
+
+ // Use given encoding
+ if (encoding == null) {
+ internalIn2 = new InputStreamReader(internalIn);
+ } else {
+ internalIn2 = new InputStreamReader(internalIn, encoding);
+ }
+ }
+
+
+ public void close() throws IOException {
+ init();
+ internalIn2.close();
+ }
+
+
+ public int read(char[] cbuf, int off, int len) throws IOException {
+ init();
+ return internalIn2.read(cbuf, off, len);
+ }
+
+
+}
--
Gitblit v1.8.0