Я пытаюсь распечатать некоторые данные, включая имена с японскими символами и кандзи в табличном представлении в терминале.В другом проекте я нашел максимальное количество байтов в каждом столбце и добавил пробел для сопоставления номеров байтов для тех, у которых число байтов меньше максимального значения в столбце.На Windows-машине это работало нормально, однако, когда я снова пытаюсь реализовать это на своем Mac, это не работает.У меня есть следующие два вопроса:
Кто-нибудь может дать какие-либо подсказки, почему это происходит?Это из-за разницы ОС?Или любая другая причина может вызвать это?(Не знаю, относится ли это к проблеме, но машина с Windows, на которой я работал, была на японском, а мой mac - на английском)
Если это не сработает, есть ликакие-нибудь другие подходы, которые я могу использовать, чтобы решить это?лучше всего то, что один и тот же код может работать в обеих ОС.
Ниже приведен пример кода:
class test
{
public static void main(String[] args)
{
String a = "sojdi";
String b = "sじゃいおdw";
while(a.getBytes().length<b.getBytes().length)
{
a = a+' ';
}
System.out.println("|"+a+"|");
System.out.println("|"+b+"|");
System.out.println("Bytes Number of a: " + a.getBytes().length);
System.out.println("Bytes Number of b: " + b.getBytes().length);
}
}
Результат:
Количество байтов совпадает, но строки печатаются по-разному по длине.Любой совет или любой другой подход к решению этого?Заранее спасибо.
------------------------------------------------------------
Обновление:
Я нашел решение этой проблемы.На всякий случай, если кто-то захочет узнать решение, а также выступить в качестве памятки, я опубликую свое решение здесь.
Из-за разной кодировки число байтов для японских символов равно 3, а для алфавита / пробелов - 1, но ширина символа фактически равна 2 для японского языка, а для алфавита / пробелов - 1. Следовательно, каждый японский символ, который у меня естьсоздаст разницу в 2 байта вместо 1, что и должно быть, чтобы соответствовать ширине строки.Однако, когда я реализовал это в Windows ранее, это было 2 и 1 байт для японского языка и алфавита соответственно (я полагаю).Итак, как кто-то предложил, но удалил свой комментарий, я изменил свой код следующим образом:
class test
{
public static void main(String[] args)
{
String a = "sojdi";
String b = "s じゃいお青いdw";
while(a.getBytes(Charset.forName("SHIFT-JIS")).length<b.getBytes(Charset.forName("SHIFT-JIS")).length)
{
a = a+' ';
}
System.out.println("|"+a+"|");
System.out.println("|"+b+"|");
System.out.println("Bytes Number of a: " + a.getBytes(Charset.forName("SHIFT-JIS")).length);
System.out.println("Bytes Number of b: " + b.getBytes(Charset.forName("SHIFT-JIS")).length);
}
}
И результат: