Skip to content

Commit d014350

Browse files
避免 fmt::println 不能直接打印 char32_t/std::u32string 的问题
1 parent 61f4d39 commit d014350

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

docs/unicode.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ fmt::println("UTF-8 下,前四个字节:{}", s.substr(0, 4));
739739
740740
```cpp
741741
std::u32string s = U"小彭老师公开课万岁";
742-
fmt::println("UTF-32 下,前四个字符:{}", s.substr(0, 4));
742+
fmt::println("UTF-32 下,前四个字符:{}", utf8::utf32to8(s.substr(0, 4)));
743743
// 会打印 “小彭老师”
744744
```
745745

@@ -755,7 +755,7 @@ fmt::println("UTF-8 下,“公”前的所有字节:{}", s.substr(0, pos));
755755
```cpp
756756
std::u32string s = U"小彭老师公开课万岁";
757757
size_t pos = s.find(U'公'); // pos = 4
758-
fmt::println("UTF-32 下,“公”前的所有字符:{}", s.substr(0, pos));
758+
fmt::println("UTF-32 下,“公”前的所有字符:{}", utf8::utf32to8(s.substr(0, pos)));
759759
// 会打印 “小彭老师”
760760
```
761761

@@ -772,7 +772,7 @@ fmt::print("UTF-8 下第一个字节:{}", s[0]);
772772
773773
```cpp
774774
std::u32string s = U"小彭老师公开课万岁";
775-
fmt::print("UTF-32 下第一个字符:{}", s[0]);
775+
fmt::print("UTF-32 下第一个字符:{}", utf8::utf32to8(s.substr(0, 1)));
776776
// 会打印 ‘小’
777777
```
778778

@@ -1233,8 +1233,8 @@ https://github.com/nemtrif/utfcpp
12331233
```cpp
12341234
std::string s = "你好";
12351235
std::u32string u32 = utf8::utf8to32(s);
1236-
fmt::println("U+{:04X}", u32[0]);
1237-
fmt::println("U+{:04X}", u32[1]);
1236+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(u32[0]));
1237+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(u32[1]));
12381238
u32[1] = U'坏';
12391239
s = utf8::utf32to8(u32);
12401240
fmt::println("{}", s); // 你坏
@@ -1248,7 +1248,7 @@ utf8::unchecked::iterator<char *> bit(s);
12481248
utf8::unchecked::iterator<char *> eit(s + strlen(s));
12491249
for (auto it = bit; it != eit; ++it) {
12501250
// *it: char32_t
1251-
fmt::println("U+{:04X}", *it);
1251+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(*it));
12521252
}
12531253
12541254
// 安全(带边界检测)的版本
@@ -1257,7 +1257,7 @@ utf8::iterator<char *> bit(s, s, s + strlen(s));
12571257
utf8::iterator<char *> eit(s + strlen(s), s, s + strlen(s));
12581258
for (auto it = bit; it != eit; ++it) {
12591259
// *it: char32_t
1260-
fmt::println("U+{:04X}", *it);
1260+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(*it));
12611261
}
12621262
12631263
// 基于 std::string 的版本
@@ -1266,7 +1266,7 @@ utf8::iterator<std::string::iterator> bit(s.begin(), s.begin(), s.end());
12661266
utf8::iterator<std::string::iterator> eit(s.end(), s.begin(), s.end());
12671267
for (auto it = bit; it != eit; ++it) {
12681268
// *it: char32_t
1269-
fmt::println("U+{:04X}", *it);
1269+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(*it));
12701270
}
12711271
```
12721272

@@ -1292,7 +1292,7 @@ Utf8Range(T &&t) -> Utf8Range<decltype(std::begin(t))>;
12921292
// 以下是新类的使用方法
12931293
std::string s = "你好";
12941294
for (char32_t c : Utf8Range(s)) {
1295-
fmt::println("U+{:04X}", c);
1295+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(c));
12961296
}
12971297
```
12981298
@@ -1355,8 +1355,8 @@ for (char c : s.toCharArray()) {
13551355
```cpp
13561356
std::u16string s = u"你好";
13571357
std::u32string u32 = utf16::utf16to32(s);
1358-
fmt::println("U+{:04X}", u32[0]);
1359-
fmt::println("U+{:04X}", u32[1]);
1358+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(u32[0]));
1359+
fmt::println("U+{:04X}", static_cast<std::uint32_t>(u32[1]));
13601360
u32[1] = U'𰻞';
13611361
s = utf16::utf32to16(u32);
13621362
fmt::println("{}", s); // 你𰻞

0 commit comments

Comments
 (0)