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

java String.Format("%02d") produces strange unicode characters

我正在这样做:

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

而且我发现某些设备发送带有 unicode 符号的字符串,例如“٠١”:

level_end:٠١:win

我已尝试在我的环境中重现它,但 String.format 对任何整数值都能正常工作。 这可能是由特定语言环境引起的吗?为什么会发生这种情况?

更新2: 我没有找到任何信息是否为 string + int/float/etc。连接也考虑了语言环境。 smbd 碰巧知道吗?

在 java 文档中说:

Number localization. Some conversions use localized decimal digits rather than the usual ASCII digits. So formatting 123 with %d will give 123 in English locales but ١٢٣ in appropriate Arabic locales, for example. This number localization occurs for the decimal integer conversion %d, the floating point conversions %e, %f, and %g, and all date/time %t or %T conversions, but no other conversions.

顺便说一下,٠١ 在阿拉伯数字中的意思是 01。所以我会把我的电话换成

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

看看有没有帮助。