0

我正在尝试在 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(根据此处),文件编码设置如下所示(根据此处) :

在此处输入图像描述

4

3 回答 3

2

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

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

String utf8EncodedThai = new String(utf8EncodedThaiArr, "UTF-8"); //setting breakpoint here
于 2020-08-25T14:15:03.517 回答
0

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

重建后,我开始在包含泰语的字符串数组上收到编译器错误“用于编码 cp1252 的不可映射字符”(旁注:一些泰语字符很好,其他呈现为�和朋友。我本来以为要么泰语会工作或不工作,但惊讶地发现即使是常见的泰语字母,如 ก 也会导致编译器窒息)。

这个错误导致了这篇文章,我尝试了一些方法来将编译器选项设置为 UTF8。由于我的应用程序恰好是 android 应用程序的一种“预处理”,因此与应用程序本身是分开的(如果这有意义的话),我没有使用 compilerOptions 属性作为答案的奢侈在前面提到的 SO 帖子中推荐(尽管我已经将它添加到 android 应用程序端的 gradle 中)。这导致我通过 powershell 设置环境变量 JAVA_TOOLS_OPTIONS:

setx JAVA_TOOLS_OPTIONS "-Dfile.encoding=UTF8"

哪个解决了这个问题!

于 2020-08-26T09:45:59.953 回答
-1

我使用附加设置尝试了您的代码,并且代码运行良好。在此处输入图像描述

于 2020-08-25T15:47:29.293 回答