Принудительная обработка UTF-8 для std :: string в fmt - PullRequest
3 голосов
/ 09 марта 2020

В моем проекте C ++ 17 у меня есть std :: string, которая, как известно, содержит данные в кодировке UTF-8. Есть ли способ заставить fmt обрабатывать свои данные как UTF-8 так, чтобы это работало как ожидалось?

fmt::print("{:-^11}", "あいう");
// should print "----あいう----", currently prints "-あいう-"

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Обработка UTF-8 в {fmt} была недавно улучшена, и ваш пример теперь работает с веткой master:

#include <fmt/core.h>

int main() {
  fmt::print("{:-^11}", "あいう");
}

print

----あいう----
0 голосов
/ 09 марта 2020

Передайте ширину поля в качестве следующего аргумента и вычислите его самостоятельно:

#include <fmt/format.h>
#include <cstring>
int main() {
    fmt::print("{:-^{}}", "あいう", 8 + std::strlen("あいう"));
}
...