我正在开发一个 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/