java - 检查字符串是否可在 Gsm0338 中编码

标签 java unicode

我正在开发一个 SMS 应用程序,我发送 Unicode 字符 (Amharic/G'eez)。我正在使用 this example .网上的方法240 , isEncodeableInGsm0338(),用于检查我是否应该使用其他编码或默认编码。

这里是陷阱。字符串 "የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።" 显然是 Unicode,从该方法返回。我的假设是每个字母的一半。但我不能支持那个理论。如果我将文本更改为 "1.የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።",它会正确检测。

这里发生了什么?

最佳答案

知道了!

line 240 上的方法如下。

 public static boolean isEncodeableInGsm0338(String isoString) {
        byte[] isoBytes = isoString.getBytes();
        outer:
        for (int i = 0; i < isoBytes.length; i++) {
            for (int j = 0; j < isoGsm0338Array.length; j++) {
                if (isoGsm0338Array[j] == isoBytes[i]) {
                    continue outer;
                }
            }
            for (int j = 0; j < extendedIsoGsm0338Array.length; j++) {
                if (extendedIsoGsm0338Array[j][1] == isoBytes[i]) {
                    continue outer;
                }
            }
            return false;
        }
        return true;
    }

如您所见,它使用依赖于编码的isoString.getBytes()。解决方案是通过使用 isoString.toCharArray() 获取字符数组来比较每个 char

改变了

byte[] isBytes = isoString.getBytes();

char[] isBytes = isoString.toCharArray();

您可能还想将 isoBytes 命名为其他名称。就像一个魅力。

关于java - 检查字符串是否可在 Gsm0338 中编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45542310/

相关文章:

c# - 任何库将数字拼音转换为带声调标记的拼音?

php - POST 变量和波斯字符

python - 工业强度csv阅读器(python)

Java:公开 protected 方法的简单方法

java - 尝试在 servlet 上运行维护任务时出现 NoClassDefFoundError

python - 如何使用python将阿拉伯语文本存储在mysql数据库中?

python - 使用 Beautiful Soup 查找包含 unicode 字形的元素

java - 从改造中获取内容

java - 有没有办法获取实例中属性/字段的顺序?

java - 如何修复 'android.os.NetworkOnMainThreadException' ?