不能 post 以英文设备语言向网络服务器发送“İ”信件

Can't post "İ" letter to web server in English device language

在我的项目中,应该 post 土耳其国家名称 "TÜRKİYE" 与 Web 服务器的大写字母。但是当我将设备语言更改为英语时它不起作用。因为它 post "TÜRKIYE"。大写 I。我必须修复它,它应该 post "İ"。我该怎么做?

       String from1 = textV_fromCity_ac_search.getText().toString();
            String to1 = textV_toCity_ac_search.getText().toString();
            if (isValidData() && isValidDate() && hasSessionId()) {
                Intent intent = new Intent(SearchActivity.this, ResultActivity.class);
                intent.putExtra("SessionId", User.getInstance().getSessionId());
                intent.putExtra("PassengerNumber", textV_passenger_number.getText().toString());
                String[] dataX = getResources().getStringArray(R.array.cities);
                for (String aDataX : dataX) {
                    if (aDataX.equals(textV_fromCity_ac_search.getText().toString() + " (Türkiye)")) {
                        from1 = aDataX;
                    } else if (aDataX.equals(textV_toCity_ac_search.getText().toString() + " (Türkiye)")) {
                        to1 = aDataX;
                    }
                }
                intent.putExtra(MyConstants.BUNDLE_FROM, from1);
                intent.putExtra(MyConstants.BUNDLE_TO, to1);
                intent.putExtra(MyConstants.BUNDLE_ISDOMESTIC, from1.toUpperCase().contains("TÜRKİYE") && to1.toUpperCase().contains("TÜRKİYE"));
                startActivity(intent);
            }

您可以使用 Locale 大写 String。默认情况下,toUpperCase 方法使用系统默认的 Locale。但是您可以通过 locale 参数更改它。

String uppercased = "Türkiye".toUpperCase(new Locale("tr","TR"));

编辑: 好的,我正在编辑一个答案以清除问题。

您可能还想看看 "The Turkey Test":What is The Turkey Test?

从 i18n 的角度来看,土耳其语的本地化与其他语言环境有很大不同。

例如,对于后者:

Lowercase I -> ı 
Uppercase i -> İ

在Java中,默认语言环境由系统提供。但就您而言,您想明确使用土耳其语言环境。如果您想将字符串 "Türkiye" 大写为 "TÜRKİYE" 而不管系统语言,您应该提供土耳其语区域设置显式。

为了实现这一点,您需要使用 String#toUpperCase(Locale) 方法而不是使用 String#toUpperCase() 方法。