Выравнивание не UTF-8 символов при печати в C ++ - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь найти общее решение c, которое можно использовать для выравнивания текста слева и справа от указанной ширины линии.

Примечание : текст может быть почти на любом международном языке, Engli sh, японский, китайский и т. д. c.

т.е.

  std::wstring str1 = L"Hello1";
  std::wstring str2 = L"Hello2";
  std::cout << std::string(50, '-') << endl;
  std::wcout << std::left << std::setw(25) << str1 << std::right << std::setw(25) << str2 << std::endl;

Производит следующее:

--------------------------------------------------
Hello1                                      Hello2

Строка «----» имеет ширину 50 символов (без учета новой строки), а две строки «Hello1» и «Hello2» выровнены по левому и правому краям.

Но проблема в следующем:

  std::wstring str1 = L"Hello1";
  std::wstring str2 = L"Hello2";
  std::wstring str3 = L"こんにちは";
  std::wstring str4 = L"你好";

  std::cout << std::string(50, '-') << endl;
  std::wcout << std::left << std::setw(25) << str1 << std::right << std::setw(25) << str2 << std::endl;
  std::wcout << std::left << std::setw(25) << str3 << std::right << std::setw(25) << str4 << std::endl;
  std::cout << std::left << std::setw(25) << "こんにちは" << std::right << std::setw(25) << "你好" << std::endl;

, который приводит к следующему:

--------------------------------------------------
Hello1                                      Hello2
S�kao                                           `}
こんにちは                             你好
  • Я попытался найти способ выравнивания третий ряд справа без успеха, идеи?
  • Я не понимаю, почему второй ряд представлен как «мусор», есть идеи о том, как исправить этот ряд без каких-либо серьезных изменений?
...