【发布时间】:2020-02-28 17:24:27
【问题描述】:
我正在开发一个 SMS 应用程序并发送 Unicode 字符(阿姆哈拉语/G'eez)。我正在使用this example。 240,isEncodeableInGsm0338()线上的方法,用于检查是否应该使用其他编码或默认编码。
这就是问题所在。字符串"የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።",显然是Unicode,正从该方法返回。我的假设是每个字母的一半。但我不能支持这个理论。如果我将文本更改为"1. የእንግሊዝ ፕሪምየር ሊግ ነህሴ 6 ይጀምራል።",它会正确检测到。
这里发生了什么?
【问题讨论】:
-
示例代码使用 String.getBytes()。这取决于“平台默认编码”。我看不出应该是哪种编码。您最好构造一个包含此字符集中所有允许字符的字符串 GSM_0338,并且对于 SMS 文本中的每个字符,检查它是否包含在此字符串中。对于检查,我认为没有必要从 SMS 文本中创建字节。
-
@RalfKleberhoff 这有帮助。谢谢
-
为什么不让
isEncodeableInGsm0338()调用isoString.getBytes("GSM_0338")并在成功时返回true,如果失败则返回false?或者更好的是,使用GsmCharsetProvider或 Java GSM 03.38 SMS Character Set Translator 之类的东西。 -
@RemyLebeau 最后一个链接很有帮助。但是在 java 的可用字符集列表中没有称为
GSM_0338的编码。