`
lt1988
  • 浏览: 17657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java char and UTF

    博客分类:
  • j2se
阅读更多

java中的char 占两个字节,默认使用UNICODE?转换成文件保存时,根据字符范围写入到文件中。

0开使的字符为asc码的128个字符,用1byte保存;x<=0X7F

110开始的字符用2byte保存;0X7F<x<0X8F

111开始的字符用3byte保存。x>0X8F

不多说,上一段hsqldb里的代码。

public static int stringToUTFBytes(String str,
                                       HsqlByteArrayOutputStream out) {

        int strlen = str.length();
        int c,
            count  = 0;

        if (out.count + strlen + 8 > out.buffer.length) {
            out.ensureRoom(strlen + 8);
        }

        char[] arr = str.toCharArray();

        for (int i = 0; i < strlen; i++) {
            c = arr[i];

            if (c >= 0x0001 && c <= 0x007F) {
                out.buffer[out.count++] = (byte) c;

                count++;
            } else if (c > 0x07FF) {
                out.buffer[out.count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
                out.buffer[out.count++] = (byte) (0x80 | ((c >> 6) & 0x3F));
                out.buffer[out.count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
                count                   += 3;
            } else {
                out.buffer[out.count++] = (byte) (0xC0 | ((c >> 6) & 0x1F));
                out.buffer[out.count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
                count                   += 2;
            }

            if (out.count + 8 > out.buffer.length) {
                out.ensureRoom(strlen - i + 8);
            }
        }

        return count;
    }

 

分享到:
评论

相关推荐

    The Java Native Interface Programmer's Guide and Specification

    7. **字符串处理**:JNI提供了处理Java字符串和本地字符串的函数,如`GetStringUTFChars`和`ReleaseStringUTFChars`用于获取和释放Java字符串的UTF-8表示。 8. **异常处理**:在本地方法中,可以通过`...

    java 中文乱码 处理

    // JavaScript Escape and Unescape functions function escapeString(str) { return encodeURIComponent(str); } function unescapeString(str) { return decodeURIComponent(str); } ``` 这两个函数分别用于...

    JAVA上百实例源码以及开源项目源代码

    日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...

    Java英文单词汇总编程资料java应届毕业生笔试题编程资料

    尽管现代编码如UTF-16允许使用多个`char`来表示一个汉字,但单个`char`本身不能直接存储一个完整的汉字。 - 其他选项:A正确,`char`确实占用2个字节;B正确,可以存储一个英文字母;D也正确,`char`类型的封装类...

    Java文件处理工具类--FileUtil

    FIXME How to judge UTF-8 and GBK, the * correct code should be: FileReader fr = new FileReader(new * InputStreamReader(fileName, "ENCODING")); Might let the user select the * encoding would be ...

    Java面试宝典(Java面试题目大全)2011版

    7. **char存储中文**:char变量可以存储一个Unicode字符,所以理论上可以存储中文,但需注意编码问题,如使用UTF-8编码。 8. **效率计算2乘以8**:最有效率的方式是直接赋值`2 * 8`,无需复杂的计算过程。 9. **...

    Java面试宝典2014版

    - char类型使用UTF-16编码,可以存储中文汉字,但不推荐用来进行数值运算。 - 效率最高的方法是直接使用乘法运算符,即2乘以8等于16。 - 设计一个计算器来计算一百亿需要考虑到整数溢出的问题,可以考虑使用字符...

    java面试宝典2010版

    7. **char存储中文字符**:char类型可以存储一个Unicode字符,因此理论上可以存储中文汉字,但实际编码时需要注意字符集(如UTF-8)。 8. **高效计算2的8次方**:使用移位运算符`2 可以高效地计算2乘以8的结果。 9...

    java中文及特殊字符的校验方法

    return String.valueOf(c).getBytes("UTF-8").length &gt; 1; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } } ``` 校验特殊字符 在 Java 中,可以使用以下方法来校验特殊...

    一个校验文件里是否含有非英文字符代码

    if not (ord(char) &gt;= 65 and ord(char) (char) &gt;= 97 and ord(char) (char) &gt;= 48 and ord(char) ): print(f"文件包含非英文字符:{char}") break check_english_chars('path_to_your_file') # 替换为实际文件...

    最全的java面试题

    byte[] charBytes = String.valueOf(c).getBytes(StandardCharsets.UTF_8); if (count + charBytes.length &gt; byteLimit) break; sb.append(c); count += charBytes.length; } return sb.toString(); } } `...

    java常见笔试题目总结

    byte[] charBytes = Character.toString(c).getBytes(StandardCharsets.UTF_8); if (totalBytes + charBytes.length &gt; numBytes) { break; } sb.append(c); totalBytes += charBytes.length; } return sb....

    And安卓Emoji表情TextView以

    在Android系统中,Emoji通常由Unicode字符集中的特定代码点表示,这些代码点在UTF-8或UTF-16编码下可以被识别和渲染为相应的图形。 二、添加Emoji支持 1. **字体设置**:为了确保TextView能够正确显示Emoji,可能...

    java(oracle).pdf

    2. CHAR(N):定长字符串,N 表示最大字节量,不足部分填充空格。 3. VARCHAR2(N):变长字符串,节省空间,存储实际输入的长度。 4. DATE:用于存储日期和时间,格式为 (DD-MON-RR)。 在设计数据库时,通常会在每个...

    java必备的经典面试题

    这个问题的关键在于处理中文字符,因为中文字符在UTF-8编码下通常占用3个字节,所以需要确保不会截断中文字符。示例代码如下: ```java public static String substringByBytes(String str, int num) { ...

    java知识点总结之续篇2

    Java支持多种编码方式,如GB2312、GBK、UTF-8等。 - 当读取文件时,如果不知道文件的编码格式,可能会导致乱码现象出现。 - `InputStreamReader`和`OutputStreamWriter`允许指定字符集编码。 3. **读取文件的不同...

    java基础知识

    - 数据类型:整型(int)、浮点型(float/double)、字符型(char)、布尔型(boolean)等。 - 变量声明与使用:变量命名规则、作用域等。 - 运算符:算术运算符、关系运算符、逻辑运算符等。 - 控制结构:if语句、...

    各大公司企业真实面试题-阳光海融科技面试题请用Java语言编写完成如下任务的程序代码.doc

    1. **编码格式**:确保项目中的所有文件都使用UTF-8编码格式。 2. **国际化资源文件**:使用属性文件来存储不同语言的文本,例如`messages_zh_CN.properties`。 3. **编码转换**:在网络传输和文件读写时要注意编码...

    java面试题

    - **Reader/Writer**:`read(char[])`/`write(char[])`。 - **InputStream/OutputStream**:`read(byte[])`/`write(byte[])`。 #### 31. 创建读取文件的对象 使用`FileInputStream`或`FileReader`等类创建读取文件...

Global site tag (gtag.js) - Google Analytics