Class CharsetUtil

java.lang.Object
com.luna.common.text.CharsetUtil

public class CharsetUtil extends Object
字符集工具类
Author:
luna
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Charset
    GBK
    static final Charset
    ISO-8859-1
    static final Charset
    UTF-8
    static final String
    GBK
    static final String
    ISO-8859-1
    static final String
    UTF-8
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static byte[]
    bytes(CharSequence str, Charset charset)
    编码字符串
    static Charset
    charset(String charsetName)
    转换为Charset对象
    static String
    清理空白字符
    static File
    convert(File file, Charset srcCharset, Charset destCharset)
    转换文件编码
    此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
    static String
    convert(String source, String srcCharset, String destCharset)
    转换字符串的字符集编码
    static String
    convert(String source, Charset srcCharset, Charset destCharset)
    转换字符串的字符集编码
    当以错误的编码读取为字符串时,打印字符串将出现乱码。
    此方法用于纠正因读取使用编码错误导致的乱码问题。
    例如,在Servlet请求中客户端用GBK编码了请求参数,我们使用UTF-8读取到的是乱码,此时,使用此方法即可还原原编码的内容
    static Charset
    系统默认字符集编码
    static String
    系统默认字符集编码
    static int
    digit16(int b)
    获取给定字符的16进制数值
    static boolean
    equals(char c1, char c2, boolean caseInsensitive)
    比较两个字符是否相同
    static String
    过滤字符串
    static int
    getType(int c)
    获取字符类型
    static boolean
    isAscii(char ch)
    是否为ASCII字符,ASCII字符位于0~127之间
    static boolean
    isAsciiControl(char ch)
    是否为ASCII控制符(不可见字符),控制符位于0~31和127
    static boolean
    是否为可见ASCII字符,可见字符位于32~126之间
    static boolean
    isBlankChar(char c)
    是否空白符
    空白符包括空格、制表符、全角空格和不间断空格
    static boolean
    isBlankChar(int c)
    是否空白符
    空白符包括空格、制表符、全角空格和不间断空格
    static boolean
    isChar(Object value)
    给定对象对应的类是否为字符类,字符类包括:
    static boolean
    isCharClass(Class<?> clazz)
    给定类名是否为字符类,字符类包括:
    static boolean
    isEmoji(char c)
    判断是否为emoji表情符
    static boolean
    是否为Windows或者Linux(Unix)文件分隔符
    Windows平台下分隔符为\,Linux(Unix)为/
    static boolean
    isHexChar(char c)
    是否为16进制规范的字符,判断是否为如下字符
    static boolean
    isLetter(char ch)
    判断是否为字母(包括大写字母和小写字母)
    字母包括A~Z和a~z
    static boolean
    isLetterLower(char ch)
    检查字符是否为小写字母,小写字母指a~z
    static boolean
    是否为字母或数字,包括A~Z、a~z、0~9
    static boolean
    isLetterUpper(char ch)
    判断是否为大写字母,大写字母包括A~Z
    static boolean
    isNumber(char ch)
    检查是否为数字字符,数字字符指0~9
    static Charset
    parse(String charsetName)
    解析字符串编码为Charset对象,解析失败返回系统默认编码
    static Charset
    parse(String charsetName, Charset defaultCharset)
    解析字符串编码为Charset对象,解析失败返回默认编码
    static String
    str(byte[] data, Charset charset)
    解码字节码
    static String
    CharSequence 转为字符串,null安全
    static String
    str(Object obj, Charset charset)
    将对象转为字符串
    static Charset
    系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()
    static String
    系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()
    static char
    toCloseByNumber(int number)
    将[1-20]数字转换为带圈的字符:
    static char
    toCloseChar(char c)
    将字母、数字转换为带圈的字符:
    static String
    toString(char c)
    字符转为字符串
    如果为ASCII字符,使用缓存
    static String
    将对象转为字符串

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • CharsetUtil

      public CharsetUtil()
  • Method Details

    • charset

      public static Charset charset(String charsetName) throws UnsupportedCharsetException
      转换为Charset对象
      Parameters:
      charsetName - 字符集,为空则返回默认字符集
      Returns:
      Charset
      Throws:
      UnsupportedCharsetException - 编码不支持
    • parse

      public static Charset parse(String charsetName)
      解析字符串编码为Charset对象,解析失败返回系统默认编码
      Parameters:
      charsetName - 字符集,为空则返回默认字符集
      Returns:
      Charset
      Since:
      5.2.6
    • parse

      public static Charset parse(String charsetName, Charset defaultCharset)
      解析字符串编码为Charset对象,解析失败返回默认编码
      Parameters:
      charsetName - 字符集,为空则返回默认字符集
      defaultCharset - 解析失败使用的默认编码
      Returns:
      Charset
      Since:
      5.2.6
    • convert

      public static String convert(String source, String srcCharset, String destCharset)
      转换字符串的字符集编码
      Parameters:
      source - 字符串
      srcCharset - 源字符集,默认ISO-8859-1
      destCharset - 目标字符集,默认UTF-8
      Returns:
      转换后的字符集
    • convert

      public static String convert(String source, Charset srcCharset, Charset destCharset)
      转换字符串的字符集编码
      当以错误的编码读取为字符串时,打印字符串将出现乱码。
      此方法用于纠正因读取使用编码错误导致的乱码问题。
      例如,在Servlet请求中客户端用GBK编码了请求参数,我们使用UTF-8读取到的是乱码,此时,使用此方法即可还原原编码的内容
       客户端 -》 GBK编码 -》 Servlet容器 -》 UTF-8解码 -》 乱码
       乱码 -》 UTF-8编码 -》 GBK解码 -》 正确内容
       
      Parameters:
      source - 字符串
      srcCharset - 源字符集,默认ISO-8859-1
      destCharset - 目标字符集,默认UTF-8
      Returns:
      转换后的字符集
    • convert

      public static File convert(File file, Charset srcCharset, Charset destCharset)
      转换文件编码
      此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
      Parameters:
      file - 文件
      srcCharset - 原文件的编码,必须与文件内容的编码保持一致
      destCharset - 转码后的编码
      Returns:
      被转换编码的文件
      Since:
      3.1.0
    • systemCharsetName

      public static String systemCharsetName()
      系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()
      Returns:
      系统字符集编码
      Since:
      3.1.2
      See Also:
    • systemCharset

      public static Charset systemCharset()
      系统字符集编码,如果是Windows,则默认为GBK编码,否则取 defaultCharsetName()
      Returns:
      系统字符集编码
      Since:
      3.1.2
      See Also:
    • defaultCharsetName

      public static String defaultCharsetName()
      系统默认字符集编码
      Returns:
      系统字符集编码
    • defaultCharset

      public static Charset defaultCharset()
      系统默认字符集编码
      Returns:
      系统字符集编码
    • bytes

      public static byte[] bytes(CharSequence str, Charset charset)
      编码字符串
      Parameters:
      str - 字符串
      charset - 字符集,如果此字段为空,则解码的结果取决于平台
      Returns:
      编码后的字节码
    • str

      public static String str(byte[] data, Charset charset)
      解码字节码
      Parameters:
      data - 字符串
      charset - 字符集,如果此字段为空,则解码的结果取决于平台
      Returns:
      解码后的字符串
    • str

      public static String str(CharSequence cs)
      CharSequence 转为字符串,null安全
      Parameters:
      cs - CharSequence
      Returns:
      字符串
    • utf8Str

      public static String utf8Str(Object obj)
      将对象转为字符串
       1、Byte数组和ByteBuffer会被转换为对应字符串的数组
       2、对象数组会调用Arrays.toString方法
       
      Parameters:
      obj - 对象
      Returns:
      字符串
    • str

      public static String str(Object obj, Charset charset)
      将对象转为字符串
               1、Byte数组和ByteBuffer会被转换为对应字符串的数组
               2、对象数组会调用Arrays.toString方法
       
      Parameters:
      obj - 对象
      charset - 字符集
      Returns:
      字符串
    • filter

      public static String filter(CharSequence str, Filter<Character> filter)
      过滤字符串
      Parameters:
      str - 字符串
      filter - 过滤器,Filter.accept(Object)返回为true的保留字符
      Returns:
      过滤后的字符串
      Since:
      5.4.0
    • cleanBlank

      public static String cleanBlank(CharSequence str)
      清理空白字符
      Parameters:
      str - 被清理的字符串
      Returns:
      清理后的字符串
    • isAscii

      public static boolean isAscii(char ch)
      是否为ASCII字符,ASCII字符位于0~127之间
         CharUtil.isAscii('a')  = true
         CharUtil.isAscii('A')  = true
         CharUtil.isAscii('3')  = true
         CharUtil.isAscii('-')  = true
         CharUtil.isAscii('\n') = true
         CharUtil.isAscii('©') = false
       
      Parameters:
      ch - 被检查的字符处
      Returns:
      true表示为ASCII字符,ASCII字符位于0~127之间
    • isAsciiPrintable

      public static boolean isAsciiPrintable(char ch)
      是否为可见ASCII字符,可见字符位于32~126之间
         CharUtil.isAsciiPrintable('a')  = true
         CharUtil.isAsciiPrintable('A')  = true
         CharUtil.isAsciiPrintable('3')  = true
         CharUtil.isAsciiPrintable('-')  = true
         CharUtil.isAsciiPrintable('\n') = false
         CharUtil.isAsciiPrintable('©') = false
       
      Parameters:
      ch - 被检查的字符处
      Returns:
      true表示为ASCII可见字符,可见字符位于32~126之间
    • isAsciiControl

      public static boolean isAsciiControl(char ch)
      是否为ASCII控制符(不可见字符),控制符位于0~31和127
         CharUtil.isAsciiControl('a')  = false
         CharUtil.isAsciiControl('A')  = false
         CharUtil.isAsciiControl('3')  = false
         CharUtil.isAsciiControl('-')  = false
         CharUtil.isAsciiControl('\n') = true
         CharUtil.isAsciiControl('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为控制符,控制符位于0~31和127
    • isLetter

      public static boolean isLetter(char ch)
      判断是否为字母(包括大写字母和小写字母)
      字母包括A~Z和a~z
         CharUtil.isLetter('a')  = true
         CharUtil.isLetter('A')  = true
         CharUtil.isLetter('3')  = false
         CharUtil.isLetter('-')  = false
         CharUtil.isLetter('\n') = false
         CharUtil.isLetter('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为字母(包括大写字母和小写字母)字母包括A~Z和a~z
    • isLetterUpper

      public static boolean isLetterUpper(char ch)

      判断是否为大写字母,大写字母包括A~Z

         CharUtil.isLetterUpper('a')  = false
         CharUtil.isLetterUpper('A')  = true
         CharUtil.isLetterUpper('3')  = false
         CharUtil.isLetterUpper('-')  = false
         CharUtil.isLetterUpper('\n') = false
         CharUtil.isLetterUpper('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为大写字母,大写字母包括A~Z
    • isLetterLower

      public static boolean isLetterLower(char ch)

      检查字符是否为小写字母,小写字母指a~z

         CharUtil.isLetterLower('a')  = true
         CharUtil.isLetterLower('A')  = false
         CharUtil.isLetterLower('3')  = false
         CharUtil.isLetterLower('-')  = false
         CharUtil.isLetterLower('\n') = false
         CharUtil.isLetterLower('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为小写字母,小写字母指a~z
    • isNumber

      public static boolean isNumber(char ch)

      检查是否为数字字符,数字字符指0~9

         CharUtil.isNumber('a')  = false
         CharUtil.isNumber('A')  = false
         CharUtil.isNumber('3')  = true
         CharUtil.isNumber('-')  = false
         CharUtil.isNumber('\n') = false
         CharUtil.isNumber('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为数字字符,数字字符指0~9
    • isHexChar

      public static boolean isHexChar(char c)
      是否为16进制规范的字符,判断是否为如下字符
       1. 0~9
       2. a~f
       4. A~F
       
      Parameters:
      c - 字符
      Returns:
      是否为16进制规范的字符
      Since:
      4.1.5
    • isLetterOrNumber

      public static boolean isLetterOrNumber(char ch)
      是否为字母或数字,包括A~Z、a~z、0~9
         CharUtil.isLetterOrNumber('a')  = true
         CharUtil.isLetterOrNumber('A')  = true
         CharUtil.isLetterOrNumber('3')  = true
         CharUtil.isLetterOrNumber('-')  = false
         CharUtil.isLetterOrNumber('\n') = false
         CharUtil.isLetterOrNumber('©') = false
       
      Parameters:
      ch - 被检查的字符
      Returns:
      true表示为字母或数字,包括A~Z、a~z、0~9
    • toString

      public static String toString(char c)
      字符转为字符串
      如果为ASCII字符,使用缓存
      Parameters:
      c - 字符
      Returns:
      字符串
      See Also:
    • isCharClass

      public static boolean isCharClass(Class<?> clazz)
      给定类名是否为字符类,字符类包括:
       Character.class
       char.class
       
      Parameters:
      clazz - 被检查的类
      Returns:
      true表示为字符类
    • isChar

      public static boolean isChar(Object value)
      给定对象对应的类是否为字符类,字符类包括:
       Character.class
       char.class
       
      Parameters:
      value - 被检查的对象
      Returns:
      true表示为字符类
    • isBlankChar

      public static boolean isBlankChar(char c)
      是否空白符
      空白符包括空格、制表符、全角空格和不间断空格
      Parameters:
      c - 字符
      Returns:
      是否空白符
      Since:
      4.0.10
      See Also:
    • isBlankChar

      public static boolean isBlankChar(int c)
      是否空白符
      空白符包括空格、制表符、全角空格和不间断空格
      Parameters:
      c - 字符
      Returns:
      是否空白符
      Since:
      4.0.10
      See Also:
    • isEmoji

      public static boolean isEmoji(char c)
      判断是否为emoji表情符
      Parameters:
      c - 字符
      Returns:
      是否为emoji
      Since:
      4.0.8
    • isFileSeparator

      public static boolean isFileSeparator(char c)
      是否为Windows或者Linux(Unix)文件分隔符
      Windows平台下分隔符为\,Linux(Unix)为/
      Parameters:
      c - 字符
      Returns:
      是否为Windows或者Linux(Unix)文件分隔符
      Since:
      4.1.11
    • equals

      public static boolean equals(char c1, char c2, boolean caseInsensitive)
      比较两个字符是否相同
      Parameters:
      c1 - 字符1
      c2 - 字符2
      caseInsensitive - 是否忽略大小写
      Returns:
      是否相同
      Since:
      4.0.3
    • getType

      public static int getType(int c)
      获取字符类型
      Parameters:
      c - 字符
      Returns:
      字符类型
      Since:
      5.2.3
    • digit16

      public static int digit16(int b)
      获取给定字符的16进制数值
      Parameters:
      b - 字符
      Returns:
      16进制字符
      Since:
      5.3.1
    • toCloseChar

      public static char toCloseChar(char c)
      将字母、数字转换为带圈的字符:
           '1' -》 '①'
           'A' -》 'Ⓐ'
           'a' -》 'ⓐ'
       

      获取带圈数字 /封闭式字母数字 ,从1-20,超过1-20报错

      Parameters:
      c - 被转换的字符,如果字符不支持转换,返回原字符
      Returns:
      转换后的字符
      Since:
      5.6.2
      See Also:
    • toCloseByNumber

      public static char toCloseByNumber(int number)
      将[1-20]数字转换为带圈的字符:
           1 -》 '①'
           12 -》 '⑫'
           20 -》 '⑳'
       
      也称作:封闭式字符,英文:Enclosed Alphanumerics
      Parameters:
      number - 被转换的数字
      Returns:
      转换后的字符
      Since:
      5.6.2
      See Also: