Java вычитает значение char-кода в строке
Я пытаюсь преобразовать строку в ивритскую кодировку (windows 1255), поэтому мне нужно вычесть значение любого символа 1264 и поместить его в новую строку.
это код в JavaScript, который я пытаюсь преобразовать:
strText = strText.replace(/[א-ת]/ig, function(a,b,c) {
return escape(String.fromCharCode(a.charCodeAt(0)-1264));
});
И это то, что я сделал в Java, но я не получаю ожидаемое значение:
String test = "שלום";
byte[] testBytes = test.getBytes();
String testResult = "";
for (int i = 0;i < testBytes.length;i++)
{
testResult += (char)((int)testBytes[i]-1264);
}
Что я делаю неправильно?
2 ответа
Решение
Как вы используете byte
массив, максимальное число, которое может быть сохранено, равно 255, а минимальное - 0, поэтому он может хранить только расширенные символы ASCII (на самом деле, он не охватывает символы иврита). То, что вам нужно, это char
массив (может хранить любой символ Юникода).
Итак, измени это
byte[] testBytes = test.getBytes();
к этому
char[] testBytes = test.toCharArray();
Вам нужно передать кодировку при звонке String.getBytes(String)
, Что-то вроде
public static void main(String[] args) {
String test = "שלום";
try {
byte[] testBytes = test.getBytes("UTF-8");
String testResult = new String(testBytes, "UTF-8");
System.out.println(testResult);
} catch (Exception e) {
e.printStackTrace();
}
}
Выход
שלום