# cppp-reiconv
**Repository Path**: cppp-project/cppp-reiconv
## Basic Information
- **Project Name**: cppp-reiconv
- **Description**: A character set conversion library based on GNU LIBICONV. (GitHub mirror)
- **Primary Language**: C++
- **License**: LGPL-3.0
- **Default Branch**: main
- **Homepage**: https://github.com/cppp-project/cppp-reiconv
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2023-07-17
- **Last Updated**: 2025-04-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# cppp-reiconv
一个基于 GNU LIBICONV 的字符集转换库。**支持 C 和 C++20。**
如果你的 C++ 标准低于 C++20,需要修改一些代码。
## 构建
此库需要 `build-aux` 和 `cppp-platform` 两个子模块用于构建。
参见 [docs/](docs/zh_CN/README.md) 获取完整依赖列表。
**我们正在使用 [Rubisco](https://github.com/cppp-project/rubisco) 管理子模块。但它还没有准备好。所以我们现在不使用 git submodule。请手动克隆它们。**
使用以下命令克隆源代码,或者直接下载源码包:
```shell
git clone https://github.com/cppp-project/cppp-reiconv
cd cppp-reiconv
git clone https://github.com/cppp-project/build-aux --depth 1
git clone https://github.com/cppp-project/cppp-platform --depth 1
```
使用以下命令构建和安装:
```shell
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=[[BUILD_TYPE]] -DCMAKE_INSTALL_PREFIX=[[PREFIX]]
cmake --build . --config=[[BUILD_TYPE]]
cmake --install . --config=[[BUILD_TYPE]]
```
## 简单的用法
```cpp
#include
#include
#include
int main()
{
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";
std::string result = reiconv::convert("GB18030", "UTF-8", src);
std::cout << result << std::endl;
const std::string_view correct_result = "\u66f4\u559c\u5cb7\u5c71\u5343\u91cc\u96ea\uff0c\u4e09\u519b\u8fc7\u540e\u5c3d\u5f00\u989c\uff01";
if (result == correct_result)
{
std::cout << "正确!" << std::endl;
}
else
{
// 如果发生了这个,请提 issue!
std::cout << "错误!" << std::endl;
}
return EXIT_SUCCESS;
}
```
完整文档参见 [docs/](docs/zh_CN/README.md)。
## 支持的编码
和 GNU LIBICONV 一样,它提供了以下编码的支持:
+ 欧洲语言
+ ASCII, ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16},
+ KOI8-R, KOI8-U, KOI8-RU,
+ CP{1250,1251,1252,1253,1254,1257}, CP{850,866,1131},
+ Mac{Roman,CentralEurope,Iceland,Croatian,Romania},
+ Mac{Cyrillic,Ukraine,Greek,Turkish},
+ Macintosh
+ 闪米特诸族语言
+ ISO-8859-{6,8}, CP{1255,1256}, CP862, Mac{Hebrew,Arabic}
+ 日本语
+ EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1,
+ ISO-2022-JP-MS
+ 中文
+ EUC-CN, HZ, GBK, CP936, GB18030, GB18030:2022, EUC-TW, BIG5, CP950,
+ BIG5-HKSCS, BIG5-HKSCS:2004, BIG5-HKSCS:2001, BIG5-HKSCS:1999,
+ ISO-2022-CN, ISO-2022-CN-EXT
+ 韩语
+ EUC-KR, CP949, ISO-2022-KR, JOHAB
+ 亚美尼亚语
+ ARMSCII-8
+ 格鲁吉亚语
+ Georgian-Academy, Georgian-PS
+ 塔吉克语
+ KOI8-T
+ 哈萨克语
+ PT154, RK1048
+ 泰语
+ ISO-8859-11, TIS-620, CP874, MacThai
+ 老挝语
+ MuleLao-1, CP1133
+ 越南语
+ VISCII, TCVN, CP1258
+ 平台特定
+ HP-ROMAN8, NEXTSTEP
+ 完整的 Unicode
+ UTF-8
+ UCS-2, UCS-2BE, UCS-2LE
+ UCS-4, UCS-4BE, UCS-4LE
+ UTF-16, UTF-16BE, UTF-16LE
+ UTF-32, UTF-32BE, UTF-32LE
+ UTF-7
+ C99, JAVA
+ 完整的 Unicode,以 'uint16_t' 或 'uint32_t' 表示
+ UCS-2-INTERNAL, UCS-4-INTERNAL (具有设备依赖的字节序和对齐)
一些额外的编码。这些编码是 GNU LIBICONV 的额外编码。
+ 欧洲语言
+ CP{437,737,775,852,853,855,857,858,860,861,863,865,869,1125}
+ 闪米特诸族语言
+ CP864
+ 日本语
+ EUC-JISX0213, Shift_JISX0213, ISO-2022-JP-3
+ 中文
+ BIG5-2003 (experimental)
+ 土库曼语
+ TDS565
+ 平台特定
+ ATARIST, RISCOS-LATIN1
+ EBCDIC 兼容编码(不兼容ASCII,几乎不使用)
+ 欧洲语言
+ IBM-{037,273,277,278,280,282,284,285,297,423,500,870,871,875,880},
+ IBM-{905,924,1025,1026,1047,1112,1122,1123,1140,1141,1142,1143},
+ IBM-{1144,1145,1146,1147,1148,1149,1153,1154,1155,1156,1157,1158},
+ IBM-{1165,1166,4971}
+ 闪米特诸族语言
+ IBM-{424,425,12712,16804}
+ 波斯语
+ IBM-1097
+ 泰语
+ IBM-{838,1160}
+ 老挝语
+ IBM-1132
+ 越南语
+ IBM-{1130,1164}
+ 印度语
+ IBM-1137
它可以通过 Unicode 从这些编码中的任何一种转换为任何其他编码
转换。
## 编译选项
使用 CMake 进行构建
+ `BUILD_TESTING`: 编译测试工具。默认为 `ON`.
```shell
cmake .. -DBUILD_TESTING=ON
cmake --build . --config=RelWithDebInfo
ctest -C RelWithDebInfo --output-on-failure
```
+ `ICONV_COMPAT`: 启用 iconv 兼容。默认为 `OFF`.
如果 `ICONV_COMPAT` 开启,会安装 `iconv.h` 和基本的函数。
但是我们不支持 POSIX:2024 的所有功能。参见 [TODO](TODO).
## 安装
此库安装:
+ 动态库 `libcppp-reiconv`。
+ 静态库 `libcppp-reiconv.static`。
+ 头文件。
```text
include
├── cppp
│ ├── cppp-platform.h
│ ├── encodings
│ │ ├── reiconv.h
│ │ └── reiconv.hpp
│ ├── reiconv.h
│ └── reiconv.hpp
└── iconv.h # 仅当 ICONV_COMPAT 开启才存在
```
## 版权
cppp-reiconv 使用 LGPLv3,参见 [LICENSE](./LICENSE).
## 下载
参见
## 主页
## Bug 反馈
+ 请在 GitHub 创建 issue [来一个](https://github.com/cppp-project/cppp-reiconv/issues/new/)