|
| 1 | +# cppp-reiconv |
| 2 | + |
| 3 | +<img alt="C+++" src="https://avatars.githubusercontent.com/u/130828670" width="10%"> |
| 4 | + |
| 5 | +一个基于 GNU LIBICONV 的字符集转换库。**支持 C 和 C++20。** |
| 6 | + |
| 7 | +如果你的 C++ 标准低于 C++20,需要修改一些代码。 |
| 8 | + |
| 9 | +## 构建 |
| 10 | + |
| 11 | +此库需要 `build-aux` 和 `cppp-platform` 两个子模块用于构建。 |
| 12 | + |
| 13 | +参见 [docs/](docs/zh_CN/README.md) 获取完整依赖列表。 |
| 14 | + |
| 15 | +**我们正在使用 [Rubisco](https://github.com/cppp-project/rubisco) 管理子模块。但它还没有准备好。所以我们现在不使用 git submodule。请手动克隆它们。** |
| 16 | + |
| 17 | +使用以下命令克隆源代码,或者直接下载源码包: |
| 18 | + |
| 19 | +```shell |
| 20 | +git clone https://github.com/cppp-project/cppp-reiconv |
| 21 | +cd cppp-reiconv |
| 22 | +git clone https://github.com/cppp-project/build-aux --depth 1 |
| 23 | +git clone https://github.com/cppp-project/rubisco --depth 1 |
| 24 | +``` |
| 25 | + |
| 26 | +使用以下命令构建和安装: |
| 27 | + |
| 28 | +```shell |
| 29 | +mkdir build |
| 30 | +cd build |
| 31 | +cmake .. -DCMAKE_BUILD_TYPE=[[BUILD_TYPE]] -DCMAKE_INSTALL_PREFIX=[[PREFIX]] |
| 32 | +cmake --build . --config=[[BUILD_TYPE]] |
| 33 | +cmake --install . --config=[[BUILD_TYPE]] |
| 34 | +``` |
| 35 | + |
| 36 | +## 简单的用法 |
| 37 | + |
| 38 | +```cpp |
| 39 | +#include <cppp/reiconv.hpp> |
| 40 | + |
| 41 | +#include <cstdlib> |
| 42 | +#include <iostream> |
| 43 | + |
| 44 | +int main() |
| 45 | +{ |
| 46 | + const std::string_view src = "\xb8\xfc\xcf\xb2\xe1\xba\xc9\xbd\xc7\xa7\xc0\xef\xd1\xa9\xa3\xac\xc8\xfd\xbe\xfc\xb9\xfd\xba\xf3\xbe\xa1\xbf\xaa\xd1\xd5\xa3\xa1"; |
| 47 | + |
| 48 | + std::string result = reiconv::convert("GB18030", "UTF-8", src); |
| 49 | + |
| 50 | + std::cout << result << std::endl; |
| 51 | + |
| 52 | + const std::string_view correct_result = "\u66f4\u559c\u5cb7\u5c71\u5343\u91cc\u96ea\uff0c\u4e09\u519b\u8fc7\u540e\u5c3d\u5f00\u989c\uff01"; |
| 53 | + |
| 54 | + if (result == correct_result) |
| 55 | + { |
| 56 | + std::cout << "正确!" << std::endl; |
| 57 | + } |
| 58 | + else |
| 59 | + { |
| 60 | + // 如果发生了这个,请提 issue! |
| 61 | + std::cout << "错误!" << std::endl; |
| 62 | + } |
| 63 | + |
| 64 | + return EXIT_SUCCESS; |
| 65 | +} |
| 66 | +``` |
| 67 | + |
| 68 | +完整文档参见 [docs/](docs/zh_CN/README.md)。 |
| 69 | + |
| 70 | +## 支持的编码 |
| 71 | + |
| 72 | +和 GNU LIBICONV 一样,它提供了以下编码的支持: |
| 73 | + |
| 74 | ++ 欧洲语言 |
| 75 | + + ASCII, ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16}, |
| 76 | + + KOI8-R, KOI8-U, KOI8-RU, |
| 77 | + + CP{1250,1251,1252,1253,1254,1257}, CP{850,866,1131}, |
| 78 | + + Mac{Roman,CentralEurope,Iceland,Croatian,Romania}, |
| 79 | + + Mac{Cyrillic,Ukraine,Greek,Turkish}, |
| 80 | + + Macintosh |
| 81 | ++ 闪米特诸族语言 |
| 82 | + + ISO-8859-{6,8}, CP{1255,1256}, CP862, Mac{Hebrew,Arabic} |
| 83 | ++ 日本语 |
| 84 | + + EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1, |
| 85 | + + ISO-2022-JP-MS |
| 86 | ++ 中文 |
| 87 | + + EUC-CN, HZ, GBK, CP936, GB18030, GB18030:2022, EUC-TW, BIG5, CP950, |
| 88 | + + BIG5-HKSCS, BIG5-HKSCS:2004, BIG5-HKSCS:2001, BIG5-HKSCS:1999, |
| 89 | + + ISO-2022-CN, ISO-2022-CN-EXT |
| 90 | ++ 韩语 |
| 91 | + + EUC-KR, CP949, ISO-2022-KR, JOHAB |
| 92 | ++ 亚美尼亚语 |
| 93 | + + ARMSCII-8 |
| 94 | ++ 格鲁吉亚语 |
| 95 | + + Georgian-Academy, Georgian-PS |
| 96 | ++ 塔吉克语 |
| 97 | + + KOI8-T |
| 98 | ++ 哈萨克语 |
| 99 | + + PT154, RK1048 |
| 100 | ++ 泰语 |
| 101 | + + ISO-8859-11, TIS-620, CP874, MacThai |
| 102 | ++ 老挝语 |
| 103 | + + MuleLao-1, CP1133 |
| 104 | ++ 越南语 |
| 105 | + + VISCII, TCVN, CP1258 |
| 106 | ++ 平台特定 |
| 107 | + + HP-ROMAN8, NEXTSTEP |
| 108 | ++ 完整的 Unicode |
| 109 | + + UTF-8 |
| 110 | + + UCS-2, UCS-2BE, UCS-2LE |
| 111 | + + UCS-4, UCS-4BE, UCS-4LE |
| 112 | + + UTF-16, UTF-16BE, UTF-16LE |
| 113 | + + UTF-32, UTF-32BE, UTF-32LE |
| 114 | + + UTF-7 |
| 115 | + + C99, JAVA |
| 116 | ++ 完整的 Unicode,以 'uint16_t' 或 'uint32_t' 表示 |
| 117 | + + UCS-2-INTERNAL, UCS-4-INTERNAL (具有设备依赖的字节序和对齐) |
| 118 | + |
| 119 | +一些额外的编码。这些编码是 GNU LIBICONV 的额外编码。 |
| 120 | + |
| 121 | ++ 欧洲语言 |
| 122 | + + CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125} |
| 123 | ++ 闪米特诸族语言 |
| 124 | + + CP864 |
| 125 | ++ 日本语 |
| 126 | + + EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3 |
| 127 | ++ 中文 |
| 128 | + + BIG5-2003 (experimental) |
| 129 | ++ 土库曼语 |
| 130 | + + TDS565 |
| 131 | ++ 平台特定 |
| 132 | + + ATARIST, RISCOS-LATIN1 |
| 133 | ++ EBCDIC 兼容编码(不兼容ASCII,几乎不使用) |
| 134 | + + 欧洲语言 |
| 135 | + + IBM-{037,273,277,278,280,282,284,285,297,423,500,870,871,875,880}, |
| 136 | + + IBM-{905,924,1025,1026,1047,1112,1122,1123,1140,1141,1142,1143}, |
| 137 | + + IBM-{1144,1145,1146,1147,1148,1149,1153,1154,1155,1156,1157,1158}, |
| 138 | + + IBM-{1165,1166,4971} |
| 139 | + + 闪米特诸族语言 |
| 140 | + + IBM-{424,425,12712,16804} |
| 141 | + + 波斯语 |
| 142 | + + IBM-1097 |
| 143 | + + 泰语 |
| 144 | + + IBM-{838,1160} |
| 145 | + + 老挝语 |
| 146 | + + IBM-1132 |
| 147 | + + 越南语 |
| 148 | + + IBM-{1130,1164} |
| 149 | + + 印度语 |
| 150 | + + IBM-1137 |
| 151 | + |
| 152 | +它可以通过 Unicode 从这些编码中的任何一种转换为任何其他编码 |
| 153 | +转换。 |
| 154 | + |
| 155 | +## 编译选项 |
| 156 | + |
| 157 | +使用 CMake 进行构建 |
| 158 | + |
| 159 | ++ `BUILD_TESTING`: 编译测试工具。默认为 `ON`. |
| 160 | + |
| 161 | +```shell |
| 162 | +cmake .. -DBUILD_TESTING=ON |
| 163 | +cmake --build . --config=RelWithDebInfo |
| 164 | +ctest -C RelWithDebInfo --output-on-failure |
| 165 | +``` |
| 166 | + |
| 167 | ++ `ICONV_COMPAT`: 启用 iconv 兼容。默认为 `OFF`. |
| 168 | + |
| 169 | +如果 `ICONV_COMPAT` 开启,会安装 `iconv.h` 和基本的函数。 |
| 170 | +但是我们不支持 POSIX:2024 的所有功能。参见 [TODO](TODO). |
| 171 | + |
| 172 | +## 安装 |
| 173 | + |
| 174 | +此库安装: |
| 175 | + |
| 176 | ++ 动态库 `libcppp-reiconv`。 |
| 177 | ++ 静态库 `libcppp-reiconv.static`。 |
| 178 | ++ 头文件。 |
| 179 | + |
| 180 | +```text |
| 181 | +include |
| 182 | +├── cppp |
| 183 | +│ ├── cppp-platform.h |
| 184 | +│ ├── encodings |
| 185 | +│ │ ├── reiconv.h |
| 186 | +│ │ └── reiconv.hpp |
| 187 | +│ ├── reiconv.h |
| 188 | +│ └── reiconv.hpp |
| 189 | +└── iconv.h # 仅当 ICONV_COMPAT 开启才存在 |
| 190 | +``` |
| 191 | + |
| 192 | +## 版权 |
| 193 | + |
| 194 | +cppp-reiconv 使用 LGPLv3,参见 [LICENSE](./LICENSE). |
| 195 | + |
| 196 | +## 下载 |
| 197 | + |
| 198 | +参见 <https://github.com/cppp-project/cppp-reiconv/releases> |
| 199 | + |
| 200 | +## 主页 |
| 201 | + |
| 202 | +<https://github.com/cppp-project/cppp-reiconv> |
| 203 | + |
| 204 | +## Bug 反馈 |
| 205 | + |
| 206 | ++ 请在 GitHub 创建 issue [来一个](https://github.com/cppp-project/cppp-reiconv/issues/new/) |
0 commit comments