【问题标题】:How to convert into cyrillic如何转换成西里尔字母
【发布时间】:2013-05-06 20:18:27
【问题描述】:

美好的一天。

我从服务器得到这样的字符串

\u041a\u0438\u0441\u0435\u043b\u0435\u0432 \u0410\u043d\u0434\u0440\u0435\u0439

我需要将其转换为西里尔文 cp-1251 字符串。

我该怎么做?谢谢。

【问题讨论】:

    标签: java string type-conversion decode


    【解决方案1】:

    如果这是一个必须解码的字符序列,你需要首先从这样的东西开始(假设你的输入在字符串 input 中):

    StringBuffer decodedInput = new StringBuffer();
    Matcher match = Pattern.compile("\\\\u([0-9a-fA-F]{4})| ").matcher(input);
    while (match.find()) {
      String character = match.group(1);
      if (character == null)
        decodedInput.append(match.group());
      else
        decodedInput.append((char)Integer.parseInt(character, 16));
    }
    

    此时,您应该在 decodedInput 中有输入的 java 字符串表示。

    如果您的系统支持 cp-1251 字符集,您可以使用以下方式将其转换为 cp-1251:

    Charset cp1251charset = Charset.forName("cp-1251");
    ByteBuffer output = cp1251charset.encode(decodedInput.toString());
    

    【讨论】:

    • 它没有帮助。 Charset 将输入字符串的每个字符转换为字节。所以\u041a转换成6个字节,但是04+1a必须转换成2个字节。
    • 对不起,我以为你展示的是一个 java 字符串表示形式——我没有意识到它是字符的文字序列。已更新我的答案。
    • 哇。这太奇怪了——这么简单的任务需要一个复杂的技巧。谢谢 - 你让我很开心......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多