-
如何显示出Unicode文件中的汉字5
我想把一个包含汉字Unicode编码的文件uni.txt用Java读取出来,并正确显示中文,请问该如何做呢。我使用FileInputStream和DataInputStream都没有读取成功。请大家指点一下。
uni.txt包含这样的内容:
table.rows.length; //\u8868\u683c\u603b\u884c\u6570
tableModel_arr[tib].pg.perPageCount; //\u6bcf\u9875\u8bb0\u5f55\u6570
tableModel_arr[tib].pg.page;//\u5f53\u524d\u7b2c\u51e0\u9875
。。。。。。
我单独用System.out.println("table.rows.length; //\u8868\u683c\u603b\u884c\u6570")能打印汉字;但一旦用输入流就不行了。
问题补充:
**************************************************************
感谢大家,面对大家的热情,如果我不说两句的话,我心里会憋得难受的。
以前我在其它网站提问题,不是很久没有回复,就是答非所问;在JavaEye我也是第一次提问,本是抱着试试的心里,没想到各位真是够哥们,有建议,也有代码,我都不晓得如何感激了。
祝各位前途似锦,祝JavaEye越办越火!2008年6月24日 08:54
5个答案 按时间排序 按投票排序
-
采纳的答案
代码大概如下:
import java.io.*; public class ReadTxtFile { public static void main(String[] s) throws IOException { new ReadTxtFile().readTxtFile("C://uni.txt"); } private void readTxtFile(String fileName) throws IOException { File file = new File(fileName); FileInputStream fin = new FileInputStream(file); InputStreamReader read = new InputStreamReader(fin, "utf-8"); BufferedReader reader = new BufferedReader(read); String content = reader.readLine(); while (content != null) { char[] c = content.toCharArray(); char[] out = new char[c.length]; System.out.println(loadConvert(c, 0, c.length, out)); content = reader.readLine(); } read.close(); reader.close(); fin.close(); } private String loadConvert(char[] in, int off, int len, char[] convtBuf) { if (convtBuf.length < len) { int newLen = len * 2; if (newLen < 0) { newLen = Integer.MAX_VALUE; } convtBuf = new char[newLen]; } char aChar; char[] out = convtBuf; int outLen = 0; int end = off + len; while (off < end) { aChar = in[off++]; if (aChar == '\\') { aChar = in[off++]; if (aChar == 'u') { int value = 0; for (int i = 0; i < 4; i++) { aChar = in[off++]; switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed \\uxxxx encoding."); } } out[outLen++] = (char) value; } else { if (aChar == 't') aChar = '\t'; else if (aChar == 'r') aChar = '\r'; else if (aChar == 'n') aChar = '\n'; else if (aChar == 'f') aChar = '\f'; out[outLen++] = aChar; } } else { out[outLen++] = (char) aChar; } } return new String(out, 0, outLen); } }
2008年6月24日 12:17
-
去看 Properties.loadConvert (char[] in, int off, int len, char[] convtBuf)方法. 实验后,可用.
String s = new String("\u4F60"); char[] c = s.toCharArray(); char[] out = new char[c.length]; System.out.println(new Tests().loadConvert(c, 0, c.length, out)); // 你
t.loadConvert就是直接拷贝的Properties.loadConvert 方法.
2008年6月24日 10:11
-
参考java.util.Properties
public synchronized void load(InputStream inStream,String encoding) throws IOException { char[] convtBuf = new char[1024]; LineReader lr = new LineReader(inStream,encoding); int limit; int keyLen; int valueStart; char c; boolean hasSep; boolean precedingBackslash; while ((limit = lr.readLine()) >= 0) { c = 0; keyLen = 0; valueStart = limit; hasSep = false; // System.out.println("line=<" + new String(lineBuf, 0, limit) + // ">"); precedingBackslash = false; while (keyLen < limit) { c = lr.lineBuf[keyLen]; // need check if escaped. if ((c == '=' || c == ':') && !precedingBackslash) { valueStart = keyLen + 1; hasSep = true; break; } else if ((c == ' ' || c == '\t' || c == '\f') && !precedingBackslash) { valueStart = keyLen + 1; break; } if (c == '\\') { precedingBackslash = !precedingBackslash; } else { precedingBackslash = false; } keyLen++; } while (valueStart < limit) { c = lr.lineBuf[valueStart]; if (c != ' ' && c != '\t' && c != '\f') { if (!hasSep && (c == '=' || c == ':')) { hasSep = true; } else { break; } } valueStart++; } String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf); String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf); put(key, value); } lr.reader.close(); } /* * read in a "logical line" from input stream, skip all comment and blank * lines and filter out those leading whitespace characters (\u0020, \u0009 * and \u000c) from the beginning of a "natural line". Method returns the * char length of the "logical line" and stores the line in "lineBuf". */ class LineReader { public LineReader(InputStream inStream,String encoding) { try { this.reader = new BufferedReader(new InputStreamReader(inStream,encoding)); } catch (UnsupportedEncodingException e) { // Logger.getLogger(LineReader.class).error(e); } } char[] inBuf = new char[8192]; char[] lineBuf = new char[1024]; int inLimit = 0; int inOff = 0; // InputStream inStream; BufferedReader reader ; int readLine() throws IOException { int len = 0; char c = 0; boolean skipWhiteSpace = true; boolean isCommentLine = false; boolean isNewLine = true; boolean appendedLineBegin = false; boolean precedingBackslash = false; boolean skipLF = false; while (true) { if (inOff >= inLimit) { inLimit = reader.read(inBuf); inOff = 0; if (inLimit <= 0) { if (len == 0 || isCommentLine) { return -1; } return len; } } // The line below is equivalent to calling a // ISO8859-1 decoder. // c = (char) (0xff & inBuf[inOff++]); c = inBuf[inOff++]; if (skipLF) { skipLF = false; if (c == '\n') { continue; } } if (skipWhiteSpace) { if (c == ' ' || c == '\t' || c == '\f') { continue; } if (!appendedLineBegin && (c == '\r' || c == '\n')) { continue; } skipWhiteSpace = false; appendedLineBegin = false; } if (isNewLine) { isNewLine = false; if (c == '#' || c == '!') { isCommentLine = true; continue; } } if (c != '\n' && c != '\r') { lineBuf[len++] = c; if (len == lineBuf.length) { int newLength = lineBuf.length * 2; if (newLength < 0) { newLength = Integer.MAX_VALUE; } char[] buf = new char[newLength]; System.arraycopy(lineBuf, 0, buf, 0, lineBuf.length); lineBuf = buf; } // flip the preceding backslash flag if (c == '\\') { precedingBackslash = !precedingBackslash; } else { precedingBackslash = false; } } else { // reached EOL if (isCommentLine || len == 0) { isCommentLine = false; isNewLine = true; skipWhiteSpace = true; len = 0; continue; } if (inOff >= inLimit) { inLimit = reader.read(inBuf); inOff = 0; if (inLimit <= 0) { return len; } } if (precedingBackslash) { len -= 1; // skip the leading whitespace characters in following // line skipWhiteSpace = true; appendedLineBegin = true; precedingBackslash = false; if (c == '\r') { skipLF = true; } } else { return len; } } } } //=================end of readLine()=========== } /* * Converts encoded \uxxxx to unicode chars and changes special saved * chars to their original forms */ private String loadConvert(char[] in, int off, int len, char[] convtBuf) { if (convtBuf.length < len) { int newLen = len * 2; if (newLen < 0) { newLen = Integer.MAX_VALUE; } convtBuf = new char[newLen]; } char aChar; char[] out = convtBuf; int outLen = 0; int end = off + len; while (off < end) { aChar = in[off++]; if (aChar == '\\') { aChar = in[off++]; if (aChar == 'u') { // Read the xxxx int value = 0; for (int i = 0; i < 4; i++) { aChar = in[off++]; switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed \\uxxxx encoding."); } } out[outLen++] = (char) value; } else { if (aChar == 't') aChar = '\t'; else if (aChar == 'r') aChar = '\r'; else if (aChar == 'n') aChar = '\n'; else if (aChar == 'f') aChar = '\f'; out[outLen++] = aChar; } } else { out[outLen++] = (char) aChar; } } return new String(out, 0, outLen); }
2008年6月24日 10:05
相关推荐
从Delphi7开始,窗体文件dfm里的汉字都变成了#28162#31992之类的形式,看起来非常不直观。 而且在delphi2009,delphi2010里,...因此,做了一个转换器,可以将Unicode数字表示的汉字#28162#31992转换为正确显示的汉字。
Unicode汉字编码表是全球计算机系统中用于表示汉字的标准编码之一,它在中文信息处理领域扮演着至关重要的角色。Unicode,全称统一码或万国码,是一个为所有字符集提供唯一数字标识的国际标准,旨在解决不同语言字符...
通过使用UNICODE,Notepad++能够正确地显示和保存包含中文字符的文件,这对于中文开发者来说非常关键。 Notepad++的特点包括: 1. **多文档界面**:用户可以同时打开和编辑多个文件,方便在不同的代码之间切换。 ...
因此,做了一个转换器,可以将Unicode数字表示的汉字#28162#31992转换为正确显示的汉字。 也可以反向转换,即将含汉字的文件转换为#28382#33288之类的格式。 因客户的习惯要求,需要对工程做简繁体转换。 本工具可以...
Unicode文件是一种广泛使用的字符编码标准,它旨在统一全球各种语言的字符表示,使得不同语言的文字能够在计算机中正确地存储和处理。在IT行业中,理解和掌握Unicode对于开发跨平台、多语言支持的应用程序至关重要。...
在这个实验中,表单可能包含用于显示Unicode文本的控件,比如LABEL或EDIT,开发者可能已经编写了代码来处理Unicode输入和显示。 `unicode.VCT` 和 `unicode.vcx` 可能是自定义控件或者类库文件,它们扩展了VFP的...
例如,当从Unicode编码的文件中读取数据时,可能会遇到显示乱码的情况,这时就可以用此工具进行转换。同时,对于处理多语言内容的软件开发者,此工具也有助于确保程序正确地显示和处理各种语言的字符。 综上所述,...
在VB(Visual Basic)编程中,处理Unicode文件是一项常见的任务,因为Unicode是一种广泛使用的字符编码标准,能够支持全球多种语言的字符。本实例主要讲解如何使用VB进行Unicode文件的读写操作,尤其关注二进制模式...
标题中的"unicode文件和中文文件互转程序加源码"指的是一个能够转换Unicode编码的文件与中文特定编码(如GB2312、GBK等)文件的程序。这个程序可能包含两部分:读取Unicode编码的文件并将其转换为中文编码,以及将...
“Unicode转中文”是指将Unicode编码的字符串转换为中文字符显示。在C#中,这通常是透明的,因为C#的String类内部使用UTF-16编码,而中文字符在UTF-16中可以直接表示。但如果你需要手动进行转换,可以使用`Encoding`...
6. **检查结果**:转换完成后,检查新文件夹中的TXT文件,确认中文字符是否正常显示。 在使用这个工具时,需要注意的是,如果源文件已经使用Unicode编码,转换可能不会产生任何变化,或者可能导致文件元数据丢失。...
压缩包中的“中文汉字转unicode工具”很可能是这样一个实用的应用程序,提供了便捷的方式来处理和转换中文汉字到 Unicode 码点。使用这样的工具,无论是开发者还是普通用户,都能够更方便地理解和操作汉字在数字世界...
本文将深入探讨“Unicode中简体中文编码”这一主题,以及它在实际应用中的意义和作用。 Unicode是一个国际标准,旨在为世界上所有字符提供一个统一的编码方案。它的目标是消除由于不同字符集(如ASCII、GB2312、Big...
根据提供的文件内容,我们了解到该文件包含了一段特殊的Unicode编码表示例,范围为`4e00-9fa5`,这部分是Unicode标准中用于表示常用汉字的部分。 ##### 字符范围解析 - **起始码位**:`4e00` - 表示该范围内的第...
在这个“unicode.txt”文件中,我们很可能看到的是以UTF-8或UTF-16编码的Unicode码点,这些码点需要转换为对应的中文字符才能被人类阅读。转换过程通常包括以下几个步骤: 1. **读取文件**:首先,我们需要读取...
在给定的标题“unicode点阵显示字库文件”和描述“gbk点阵字库文件,unicode转换为gbk的文件”中,涉及到两个关键的字符编码标准:Unicode和GBK,以及点阵字库的概念。 1. Unicode: Unicode是一种国际标准,也称为...
通过这个码点,我们可以将Unicode编码转换为汉字,以便在计算机系统中显示和处理。 批量转换Unicode码至汉字是一个常见的需求,特别是在处理大量文本数据时。在提供的描述中,提到了一个工具或者程序,用户可以输入...
在Unicode编码体系中,中文字符通常占据两个或四个字节,这取决于具体的实现方式。 "unicode-cn.zip"这个压缩包文件似乎包含了一个名为"Unicode.exe"的应用程序,可能是用于进行Unicode编码和中文字符之间的转换...
汉字UNICODE互换工具就是为了解决这类问题而生的,它能将文本数据中的汉字从一种编码格式转换为另一种,例如将GBK编码的文本转换成UNICODE编码,以便在支持UNICODE的系统上正常显示。 使用这款工具,用户可以方便地...
根据提供的部分内容,可以推断出文件中列出了一系列汉字及其对应的UNICODE编码。例如,开头列出了“人”、“千”、“川”等字,后面跟随的是它们对应的UNICODE编码值(如“人”对应“4EBA”)。通过这种方式,可以为...