На днях я столкнулся с странной странной ошибкой. У меня была строка символов, которые мне пришлось строить. И в качестве разделителя хост-системы я общался с используемым char 254. В любом случае я строю свою строку и отправил ее на хост. На хосте я принимал char 222 в качестве разделителя! После того, как чесать голову и глядя в него глубже, казалось странным, чтоJava String.toUpperCase()
шестигранной: FE, двоичная: 11111110
превращался в
шестнадцатеричном: DE, двоичная: 11011110
Я попытался локали .getDefault() и Locale.ENGLISH безрезультатно.
Может ли быть реализовано, что реализация String.toUpperCase имеет маску для ВСЕХ символов, за исключением конкретных жестко закодированных?
На данный момент я использую следующие, чтобы обойти эту проблему:
public static String toUpperCase(String input) {
char[] chars = input.toCharArray();
for(int i = 0; i < chars.length; ++i) {
if(chars[i] > 96 && chars[i] < 123) {
chars[i] &= 223;
}
}
return new String(chars);
}
мой вопрос я что-то отсутствует? Есть ли лучший способ, о котором я не знаю? Огромное спасибо!
Спасибо! Так что, другими словами, я идиот, а не разработчик по умолчанию toUpperCase(). Это имеет смысл теперь, когда я действительно знаю об исландском звуке примерно для «th», как сказал Йони выше. Я не реализовал хост-систему, поэтому я не мог контролировать, что они использовали в качестве разделителей. На самом деле это очень старая система на основе PICK. Я отмечаю это как ответ за полезную ссылку. –