java String.Format(“%02d”)产生奇怪的unicode字符

时间:2015-02-07 19:14:50

标签: java unicode printf string-formatting

我正是这样做的:

    int level = ...;//some value from game
    Analytics.newDesignEvent(String.format("level_end:%02d:win", level));

我发现有些设备发送带有unicode符号的字符串,例如“01”:

level_end:01:赢

我试图在我的环境中重现它,但是String.format可以使用任何整数值。 可能这是由特定的语言环境引起的?为什么会发生这种情况呢?

Updt2: 我没有找到任何关于string + int / float / etc的信息。 concantenation也考虑到locale。 smbd碰巧知道吗?

1 个答案:

答案 0 :(得分:2)

在java文档中说:

  

号码本地化。某些转换使用本地化的十进制数字   而不是通常的ASCII数字。所以使用%d格式化123将会   在英语语言环境中给出123,但在适当的阿拉伯语语言环境中给出123   例。对十进制整数进行此数字本地化   转换%d,浮点转换%e,%f和%g,以及所有   日期/时间%t或%T转化,但没有其他转化。

Btw 01表示阿拉伯数字为01。所以我将把我的电话换成

String.format(Locale.US, "level_end:%02d:win", level)

并且会看到它有帮助。