如何解决泰语脚本似乎在Java for-each循环中丢失了UTF-8编码
我正在尝试在Windows 10上的Android Studio中开发应用程序。
问题:以下泰语单词的字符串数组:
String[] myTHarr = {"มาก","เชี่ยว","แน่","ม่อน","บ้าน","พูด","เลื่อย","เมื่อ","ช่ำ","แร่"};
...由以下for-each循环处理时:
for (String s:myTHarr){
//s = มา� before executing any of the below code:
byte[] utf8EncodedThaiArr = s.getBytes("UTF-8");
String utf8EncodedThai = new String(utf8EncodedThaiArr); //setting breakpoint here
// s is still มาà¸� (I want it to be มาก)
//do stuff
}
在尝试处理第一个单词时会导致s =มาà¸。(其他两个单词都不起作用,但是如果第一个单词失败,则可以预期)。
泰语脚本正确显示在字符串数组中(声明是直接从Android Studio复制的),Java文件的文件编码设置为UTF-8(每个here),文件编码设置看起来像这样(每here):
解决方法
根据文档,String(byte[])
构造函数“通过使用平台的默认字符集解码指定的字节数组来构造新的String。”
我猜默认字符集不是UTF-8。因此解决方案是为字节数组指定编码。
String utf8EncodedThai = new String(utf8EncodedThaiArr,"UTF-8"); //setting breakpoint here
,
正如评论中的一些人指出的那样,问题必须存在于我的环境中。经过更多搜索后,我发现我应该在更改编码后重建项目(因此仅切换到UTF8并单击“应用” /“确定”是不够的)。我在这里应注意,我的文件编码设置如下所示,以供参考:
一旦重建,我就开始在包含泰语的String数组上收到编译器错误“用于编码cp1252的不可映射字符”(注意:有些泰语字符很好,另一些则表示为�和朋友。我本以为要么全部泰语都能工作,要么都不起作用,但很惊讶甚至连普通的泰语字母(如ก都会使编译器阻塞)。
该错误导致发布了this帖子,其中我尝试了一些尝试将编译器选项设置为UTF8。由于我的应用程序恰好是android应用程序的一种“预处理”,因此与应用程序本身是分开的(如果有任何意义),因此我没有奢侈地使用CompilerOptions属性作为答案在上述推荐的SO帖子中推荐(尽管我已将其添加到android应用程序端的gradle中)。这导致我通过powershell设置环境变量JAVA_TOOLS_OPTIONS:
setx JAVA_TOOLS_OPTIONS "-Dfile.encding=UTF8"
解决了该问题!
,版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。