Enum toString有时用ı代替我

时间:2017-09-15 03:55:59

标签: java android google-analytics

我最近收到一份报告,其中记录了一些Google Analytics事件类别名称,其中i字符顶部有一个点。

  

网页浏览量和事件发生两次,一次在i上没有点。

我不得不相信它。果然,我有一个名为“最爱”的事件,并且有一小部分名为favorıte。将这个奇怪的字符复制并粘贴到终端或等宽字体中,只是为了看它有多奇怪。 favorıte

我的第一个怀疑是我的代码,我在枚举上使用toString生成类别名称的字符串。

public enum AnalyticsEvent {

    SCREEN_VIEW,
    FAVORITE,
    UN_FAVORITE,
    CLICK_EVENT,
    ... reduced for brevity;

    public String val() {
        return this.toString().toLowerCase();
    }
}

如何使用枚举的示例:

@Override
public void logSearchTag(String type, String value) {
    ...
    logGAEvent(AnalyticsEvent.SEARCH_TAG.val(), type, value);
}

private void logGAEvent(String category, String action, String label) {
    ... // mGATracker = instance of com.google.android.gms.analytics.Tracker;
            mGATracker.send(addCustomDimensions(new HitBuilders.EventBuilder()
                    .setCategory(category)
                    .setAction(action)
                    .setLabel(label))
                    .build());
    ...
}

我将通过实际为枚举分配字符串来解决此问题,而是在val()函数中返回该字符串。

尽管如此,我很好奇,如果有人知道为什么在少数几个设备上Enum.toString返回枚举名称,并用那个奇怪的字符替换i。我的意思是小。平均每人8万分之五。或者假设是错误的,错误是在某个地方的分析服务端吗?非常怀疑。

1 个答案:

答案 0 :(得分:1)

handle_call方法使用系统的默认语言环境。这使用特定于语言环境的字符,例如String#toLowerCase而不是ı。要解决此问题,请使用区域设置调用i

toLowerCase