【问题标题】:How to programmatically set application name in Japanese?如何以编程方式在日语中设置应用程序名称?
【发布时间】:2012-06-14 00:55:23
【问题描述】:

目前我正在尝试使用设置应用程序名称

net.rim.blackberry.api.homescreen.HomeScreen.setName("これはある");

但它会抛出异常:IllegalArgumentException

谁能提供解决方案?

我使用的是黑莓 JDE 5.0。

【问题讨论】:

  • 您能否提供有关 IllegalArgumentException 的更多信息?唯一的其他选择是在API 上尝试setName(String name, int int index)
  • 当我使用 setName() 以英文设置应用程序名称但在日文中抛出异常时,它工作正常
  • 异常信息说明了什么?您刚刚向我们展示了异常名称。
  • 我的想法是 API 验证输入,也许它只接受英文/欧元字符。您可能想写入 API 支持,看看是否是这种情况。
  • 试试 net.rim.blackberry.api.homescreen.HomeScreen.setName("\u3053\u308C\u306F\u3042\u308B");

标签: blackberry java-me


【解决方案1】:

这可能是字符串编码问题。试试

new String(new String("これはある").getBytes("UTF-16BE"), "UTF-16BE");

它不漂亮,但我认为它会起作用。

这里是黑莓字符串规范的链接:http://www.blackberry.com/developers/docs/5.0.0api/java/lang/String.html

默认为 ISO-8859-1,不包含日文字符。

【讨论】:

  • setName 接受一个字符串,而不是一个字节数组,所以我认为你在看问题的错误方面。在 BlackBerry 开发中,无法指定 .java 文件的编码,并且它默认为 iso-8859-1,因此编译器试图以不支持日语的字符集读取源代码。斯维特林在 cmets 中的回答是一个更好的方法。
  • 这将从一个字节数组创建一个字符串,该字符串将被传递给 setName,而不仅仅是一个字节数组。一组日文字符将被存储为字节,无论计算机是否正确解释它们,对吧?它只是另一个具有长度和空终止符的字符串(字节数组)。编译器不应该关心。他的方法有效,但前提是您只想设置一个字符串。
  • 您的解决方案不起作用,因为 BlackBerry 编译器 会将您的 sn-p 中的日文字符解释为 ISO-8859-1。问题基本上在于 java 源代码的编码。使用 same 字符编码调用 getBytes 和 setBytes 不会更改编译器解析的错误字符。此外,虽然与这个问题几乎无关,但 Java 不使用以 null 结尾的字符串表示形式。
【解决方案2】:

您面临的问题是如何将源代码中表示的字符串以相同的字符放入您的应用程序中。对于拉丁字符,这非常简单,因为我们可以将字符放在引号中,然后得到一个字符串,例如“Hello world”

当你去非拉丁语,比如日语,它会变得更难。您仍然可以在源代码中直接编写日语,但您需要确保您的编辑器和编译器就编码达成一致,以便正确解释字符。 Java-SE 编译器接受一个参数“-encoding”,它允许您指定 Java 源文件的编码。
不幸的是,BlackBerry 编译器 rapc 不提供指定编码的选项,即使它调用 javac 本身也是如此。所以 rapc 使用平台默认值,在 Linux 和 OSX 上是 utf-8,在 Windows 上是 iso-8859-1。

解决这个问题的方法是使用 Java 语言的一个特性来解析字符串 - Unicode 转义。通过在字符串中输入六个字符序列“\u3053”,java 编译器会将该数字解析为十六进制并使用相应的 unicode 代码点,从而解决源文件编码问题。 因此,“Hello world”和“\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064”将导致您的类文件中出现相同的字符串。

正因为如此,斯维特林从 cmets 的回答是正确的方法:

net.rim.blackberry.api.homescreen.HomeScreen.setName("\u3053\u308C\u306F\u3042\u‌​308B");

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2017-12-08
    相关资源
    最近更新 更多