通过编码范围,判断字符串是哪个国家语言

最近项目上遇到了一个问题,就是按照字符串的语言,来采用不同的解码。

例如:汉语“你好”,采用GKB解码,英文“hello”,采用UTF_8解码。

有时候一句话,一个String串里面会有好几种语音,String = “你好hello啊”,就是既有中文又有英语。

直接上代码吧,通过如下方法解码

    /**
     * 显示中文:采用GBK解码
     * 显示英文:采用GBK解码
     * 显示俄罗斯:采用GBK解码
     * 显示西班牙语:采用GBK解码
     *
     * 显示阿拉伯语:采用UTF-8解码
     * 显示希伯来语:采用UTF-8解码
     * 显示土耳其语:采用UTF-8解码
     * 显示罗马尼亚语:采用UTF-8解码
     * 显示法语:采用UTF-8解码
     * @param name
     * @return
     */
    private static void createCombinationDataFormatConvert(String name) {
        Log.d(TAG, "createCombinationDataFormatConvert name == " + name);
        int totalNum = 0;
        char[] datas = name.toCharArray();
        List<Byte> byLists = new ArrayList<Byte>();
        for (char data : datas) {
            Log.d(TAG, "createCombinationDataFormatConvert data code == " + (int)data + " data == " + data);
            if (isChineseChar(data) || isRuChar(data) || isEsChar(data)) {//采用GBK解码
                String valueOf = String.valueOf(data);
                byte[] gbks = null;
                try {
                    gbks = valueOf.getBytes("gbk");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                //noinspection ConstantConditions
                for (byte gbk : gbks) {
                    byLists.add(gbk);
                }
            } else {
                String valueOf = String.valueOf(data);
                byte[] utf8s = null;
                utf8s = valueOf.getBytes(StandardCharsets.UTF_8);
                for (byte utf8 : utf8s) {
                    byLists.add(utf8);
                }
            }
        }
        totalNum = byLists.size();
    }

通过如下方法,来判断字符是哪个语言:

    //中文
    private static boolean isChineseChar(char c) {
        return c >= 0x4E00 && c <= 0x9FA5;
    }
    //俄文
    private static boolean isRuChar(char c) {
        return c >= 0x0400 && c <= 0x052F;
    }
    //西班牙语,英文字符的编码范围在 U+0020 到 U+007E 之间
    //西班牙语里面就有英文字母
    private static boolean isEsChar(char c) {
        return c >= 0x0000 && c <= 0x007F;
    }

大体思路就是,先把String通过name.toCharArray();获取char数组,然后判断每个字符的char是在哪个语言的编码范围,然后在去根据需求解码即可。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值