java - 将扩展的 ASCII 字符串转换为印地文文本

标签 java conventions extended-ascii

我在 android 中通过 USB 通信以扩展 ASCII 字符的形式接收字符串文本,例如

String receivedText = "5286T11ɬ ªË ¦¿¯¾ ¯¾ ɬ ¨¬°:A011605286 ª¿ª ¾®:12:45 ¸Í®°:(9619441121)ª¿ª:-, ®¹¿¦Í°¾ ¡ ®¹¿¦Í°¾ ª¨À, ¾¦¿µ²À ¸Í, ¾¦¿µ²À ªÂ°Íµ °¿®¾°Í͸:- ¡Í°Éª:-, ¬¾¹°, ¸¾¤¾Í°Â¼ ªÂ°Íµ~";

现在这些字符在印地语中代表一个字符串。

我不知道如何将接收到的字符串转换为印地语等效文本。 任何人都知道如何使用 java 将其转换为等效的印地文文本

以下是我用来将字节数组转换为字节字符串的代码片段

public String byteArrayToByteString(byte[] arayValue, int size) {
        byte ch = 0x00;
        int i = 0;

        if (arayValue == null || arayValue.length <= 0)
            return null;

        String pseudo[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                "A", "B", "C", "D", "E", "F" };
        StringBuffer out = new StringBuffer();

        while (i < size) {

            ch = (byte) (arayValue[i] & 0xF0); // Strip off high nibble
            ch = (byte) (ch >>> 4); // shift the bits down
            ch = (byte) (ch & 0x0F); // must do this is high order bit is on!
            out.append(pseudo[(int) ch]); // convert the nibble to a String
            // Character
            ch = (byte) (arayValue[i] & 0x0F); // Strip off low nibble
            out.append(pseudo[(int) ch]); // convert the nibble to a String
            // Character
            i++;
        }
        String rslt = new String(out);

        return rslt;
    }

如果这有助于找到解决方案,请告诉我

编辑:

它是UTF-16编码,receivedText字符串中的字符是印地文字符的扩展ASCII形式

新编辑

我有新角色

String value = "?®Á?Ƕ ¡??°¿¯¾";

在印地语中说 मुकेश,在印地语中说 dangaria。谷歌翻译器没有将 dangaria 翻译成印地语,所以我无法为您提供它的印地语版本。

我和编码人员谈过,他说他在编码之前从输入中删除了 2 位,即如果\u0905 在印地语中表示 अ,那么他从输入中删除了\u09 并将剩余的 05 转换为扩展的十六进制形式。

所以我提供给你的新输入字符串是以上述解释的形式解码的。即\u09 被删除,其余部分被转换为扩展的 ascii,然后使用 USB 发送到设备。

让我知道这个解释是否能帮助您找到解决方案

最佳答案

我一直在研究这个问题,并且知道您可能需要做什么。出于某种原因,您发布的 receivedText 的值似乎在 windows-1252 中编码。可能是将其粘贴到这篇文章中。提供原始字节值可以更好地避免任何编码错误。无论如何,我能够将该 String 转换为以下 Unicode Devanagari 字符:

5286T11फए ऋभ इडऒठ ऒठ फए उएओ:A011605286 ऋडऋ ठऍ:12:45 चयऍओ:(9619441121)ऋडऋ:-, ऍछडइयओठ ँ ऍछडइयओठ ऋउढ, ठइडगऑढ चय, ठइडगऑढ ऋतओयग ओडऍठओययच:- ँयओफऋ:-, एठछओ, चठअठयओतञ ऋतओयग~

使用以下代码:

final String receivedText = "5286T11ɬ ªË ¦¿¯¾ ¯¾ ɬ ¨¬°:A011605286 ª¿ª ¾®:12:45 ¸Í®°:(9619441121)ª¿ª:-, ®¹¿¦Í°¾ ¡ ®¹¿¦Í°¾ ª¨À, ¾¦¿µ²À ¸Í, ¾¦¿µ²À ªÂ°Íµ °¿®¾°Í͸:- ¡Í°Éª:-, ¬¾¹°, ¸¾¤¾Í°Â¼ ªÂ°Íµ~";

final Charset fromCharset = Charset.forName("x-ISCII91");
final CharBuffer decoded = fromCharset.decode(ByteBuffer.wrap(receivedText.getBytes("windows-1252")));

final Charset toCharset = Charset.forName("UTF-16");
final byte[] encoded = toCharset.encode(decoded).array();
System.out.println(new String(encoded, toCharset.displayName()));

你需要告诉我这些字符是否是预期的字符:)

此外,我不确定 x-ISCII91 字符编码在 Android 中是否可用。

关于java - 将扩展的 ASCII 字符串转换为印地文文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14684108/

相关文章:

c++ - 在 for 循环内部使用时,是否存在后增量实际上优于前增量的异常甚至极端极端情况?

C从文件中读取utf字符

java - SWT Canvas 在重绘时不显示图像,除非其像素为 5x5

java正则表达式捕获字符串中任意数量的句点

java - CXF 中的响应超时属性

java - 根据最长长度的数字打印出特定数量的数字?

C# 字符串连接最佳实践

rest - 制作只读 REST 接口(interface)的约定?

linux - 删除扩展的 ASCII 字符。 Linux 脚本 (128-255)

javascript - 如何使用 nodejs 在终端中呈现扩展的 ASCII 字符