我正在开发一个短信应用程序,我发送的是Unicode字符(阿姆哈拉语/盖兹语)。我使用这个示例。第240行的方法
以下是代码:
这里有个问题。明显是Unicode的字符串
这里发生了什么?
isEncodeableInGsm0338()
用于检查是否应该使用另一种编码或默认编码。以下是代码:
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;
}
这里有个问题。明显是Unicode的字符串
"የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።"
从那个方法返回。我的假设是每个字母的一半。但我无法支持这个理论。如果我将文本更改为"1. የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።"
,它可以正确检测到。这里发生了什么?
isEncodeableInGsm0338()
调用isoString.getBytes("GSM_0338")
,如果成功则返回 true,失败则返回 false?或者更好的方法是使用GsmCharsetProvider
或 Java GSM 03.38 SMS Character Set Translator 这样的工具。 - Remy Lebeau