微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

泰语脚本似乎在Java for-each循环中丢失了UTF-8编码

如何解决泰语脚本似乎在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):

enter image description here

解决方法

根据文档,String(byte[])构造函数“通过使用平台的默认字符集解码指定的字节数组来构造新的String。”

我猜默认字符集不是UTF-8。因此解决方案是为字节数组指定编码。

String utf8EncodedThai = new String(utf8EncodedThaiArr,"UTF-8"); //setting breakpoint here
,

正如评论中的一些人指出的那样,问题必须存在于我的环境中。经过更多搜索后,我发现我应该在更改编码后重建项目(因此仅切换到UTF8并单击“应用” /“确定”是不够的)。我在这里应注意,我的文件编码设置如下所示,以供参考: enter image description here

一旦重建,我就开始在包含泰语的String数组上收到编译器错误“用于编码cp1252的不可映射字符”(注意:有些泰语字符很好,另一些则表示为�和朋友。我本以为要么全部泰语都能工作,要么都不起作用,但很惊讶甚至连普通的泰语字母(如ก都会使编译器阻塞)。

该错误导致发布了this帖子,其中我尝试了一些尝试将编译器选项设置为UTF8。由于我的应用程序恰好是android应用程序的一种“预处理”,因此与应用程序本身是分开的(如果有任何意义),因此我没有奢侈地使用CompilerOptions属性作为答案在上述推荐的SO帖子中推荐(尽管我已将其添加到android应用程序端的gradle中)。这导致我通过powershell设置环境变量JAVA_TOOLS_OPTIONS:

setx JAVA_TOOLS_OPTIONS "-Dfile.encding=UTF8"

解决了该问题!

,

我尝试使用随附的设置来验证您的代码,该代码工作正常。enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。