Làm thế nào đọc file txt chứa ký tự Unicode

Lâu rồi làm J2ME nhưng mà Gió thấy có một cái khó, hay và bản thân Gió lại không hiểu tại sao làm được thế!😀 Đó chính là đọc file txt chứa các ký tự Unicode! Với giải pháp đọc file chứa các lý tự Unicode này, thì các ứng dụng cho Mobile của Việt Nam giải quyết được khá là nhiều việc. Hi vọng với đoạn mã sau đây thì các bạn có thể thoát khỏi những vứng mắc như khi Gió mới làm ứng dụng mobile.

Đoạn mã này truy cập đến file có sẵn trong source và nó đảm bảo bạn có thể hiện thị được thông tin lên màn hình đúng với những gì mà nó được chứa trong file.

package com.Ai.CSSK.Until;

import java.io.InputStream;


/**
*
* @author Gio
*/

public class FileFactory {

private static boolean complete = false;
private String nameOfFile;
private StringBuffer sringBuffer = new StringBuffer(256);
private String contendOfFile = “”;
private int[] surrogatePair = new int[2];
private int val = 0;
private int unicharCount = 0;
private static int byteVal;
private static int expecting = 0;
private static int composedVal = 0;
private static int high4 = 0;
private static int mid6 = 0;
private static int low10 = 0;
private static int c = -1;
private InputStream is = null;

public FileFactory() {
nameOfFile = “”;
}

public final String readUnicodeFileUTF8(String string) {
nameOfFile = string;
if (nameOfFile.equalsIgnoreCase(“”)) {
contendOfFile = “”;
} else {
try {
contendOfFile = “”;
is = this.getClass().getResourceAsStream(nameOfFile);
sringBuffer = new StringBuffer();
val = 0;
unicharCount = 0;
while ((val = readNextCharFromStreamUTF8(is)) != -1) {
unicharCount++;
if (val <= 0xFFFF) {
// if first value is the Byte Order Mark (BOM), do not add
if (!(unicharCount == 1 && val == 0xFEFF)) {
sringBuffer.append((char) val);
}
} else {
supplementCodePointToSurrogatePair(val, surrogatePair);
sringBuffer.append((char) surrogatePair[0]);
sringBuffer.append((char) surrogatePair[1]);
}
}
contendOfFile = sringBuffer.toString();
sringBuffer = null;
is.close();
} catch (Exception e) {
e.printStackTrace();
//                contendOfFile = ” loi a?”;
}
}
return contendOfFile;
}

private final static int readNextCharFromStreamUTF8(InputStream is) {
c = -1;
if (is == null) {
return c;
}
complete = false;
try {
expecting = 0;
composedVal = 0;

while (!complete && (byteVal = is.read()) != -1) {
if (expecting > 0 && (byteVal & 0xC0) == 0x80) {  /* 10xxxxxx */
expecting–;
composedVal = composedVal | ((byteVal & 0x3F) << (expecting * 6));
if (expecting == 0) {
c = composedVal;
complete = true;
//System.out.println(“appending: U+” + Integer.toHexString(composedVal) );
}
} else {
composedVal = 0;
expecting = 0;
if ((byteVal & 0x80) == 0) {    /* 0xxxxxxx */
// one byte character, no extending byte expected
c = byteVal;
complete = true;
//System.out.println(“appending: U+” + Integer.toHexString(byteVal) );
} else if ((byteVal & 0xE0) == 0xC0) {   /* 110xxxxx */
expecting = 1;  // expecting 1 extending byte
composedVal = ((byteVal & 0x1F) << 6);
} else if ((byteVal & 0xF0) == 0xE0) {   /* 1110xxxx */
expecting = 2;  // expecting 2 extending bytes
composedVal = ((byteVal & 0x0F) << 12);
} else if ((byteVal & 0xF8) == 0xF0) {   /* 11110xxx */
expecting = 3;  // expecting 3 extending bytes
composedVal = ((byteVal & 0x07) << 18);
} else {
// non conformant utf-8, ignore or catch error
}
}
}

} catch (Exception e) {
System.out.println(e.toString());
}

return c;
}

private final static void supplementCodePointToSurrogatePair(int codePoint, int[] surrogatePair) {
high4 = ((codePoint >> 16) & 0x1F) – 1;
mid6 = ((codePoint >> 10) & 0x3F);
low10 = codePoint & 0x3FF;

surrogatePair[0] = (0xD800 | (high4 << 6) | (mid6));
surrogatePair[1] = (0xDC00 | (low10));
}
//read file nonUTF8
public String getContentOfFileNonUTF8(String st) { //lay noi dung cua ebook ra de hien thi
String contentOfEbook;
nameOfFile = st;
StringBuffer buffer = null;
try {
is = this.getClass().getResourceAsStream(nameOfFile);
int ch;
buffer = new StringBuffer();
while ((ch = is.read()) != -1) {
buffer.append((char) ch);
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
if (buffer != null) {
contentOfEbook = buffer.toString();
} else {
contentOfEbook = “”;
}
return contentOfEbook;
}

}

Chán thắng WordPress này nhất cái khoản không hỗ trợ mình nhúng code vào.😦

😀

4 thoughts on “Làm thế nào đọc file txt chứa ký tự Unicode

  1. Nói chung cái này, cũng là Gió tìm được thôi. Không biết bác nào viết và ở đâu nưa, chỉ thấy trong sự nghiệp🙂 J2ME của mình, nó giúp khá nhiều việc, nên chia se để các bạn dùng. Có cách nào hay hơn, nhẹ nhàng hơn, bảo Gió biết nhá!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s