我最近收到一份报告,其中记录了一些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万分之五。或者假设是错误的,错误是在某个地方的分析服务端吗?非常怀疑。
答案 0 :(得分:1)
handle_call
方法使用系统的默认语言环境。这使用特定于语言环境的字符,例如String#toLowerCase
而不是ı
。要解决此问题,请使用区域设置调用i
:
toLowerCase