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

标签 java unicode printf string-formatting

我正在这样做:

    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)

看看它是否有帮助。

关于java String.Format ("%02d")产生奇怪的 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28386257/

相关文章:

java - 将对象添加到数组时动态增加数组长度

java - 如何将 WAV 文件转换为频域以使用 FFT 库

python - 加入文件名时出现 UnicodeEncodeError

html - 每个浏览器都支持所有 unicode 吗?

c 字符串在超出边界时仍然有效?

java - 将委托(delegate)人注入(inject) Jersey 2 中的资源方法

java - @javax.persistence.Column(可更新=假)

python - 如何在wxpython中传递字符'素数?

c - 为什么我的程序结合了两个 printf 命令?

c - 如何在 C 中显示浮点除法的实际结果?