diff options
author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/libxml/yencoding.cpp |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/libxml/yencoding.cpp')
-rw-r--r-- | contrib/libs/libxml/yencoding.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/contrib/libs/libxml/yencoding.cpp b/contrib/libs/libxml/yencoding.cpp new file mode 100644 index 00000000000..8092bbfb1c6 --- /dev/null +++ b/contrib/libs/libxml/yencoding.cpp @@ -0,0 +1,48 @@ + +#include "yencoding.h" + +#include <library/cpp/charset/codepage.h> +#include <library/cpp/charset/recyr.hh> + + +int +win1251ToUTF8(unsigned char* out, int *outlen, + const unsigned char* in, int *inlen) { + size_t in_readed, out_writed; + RECODE_RESULT res = Recode(CODES_WIN, CODES_UTF8, (const char*)in, (char*)out, (size_t)*inlen, (size_t)*outlen, in_readed, out_writed); + *inlen = (int)in_readed; + *outlen = (int)out_writed; + return (res == RECODE_OK)? 0 : -1; +} + +int +UTF8Towin1251(unsigned char* out, int *outlen, + const unsigned char* in, int *inlen) { + size_t in_readed, out_writed; + RECODE_RESULT res = Recode(CODES_UTF8, CODES_WIN, (const char*)in, (char*)out, (size_t)*inlen, (size_t)*outlen, in_readed, out_writed); + *inlen = (int)in_readed; + *outlen = (int)out_writed; + return (res == RECODE_OK)? 0 : -1; +} + + +int +koi8ToUTF8(unsigned char* out, int *outlen, + const unsigned char* in, int *inlen) { + size_t in_readed, out_writed; + RECODE_RESULT res = Recode(CODES_KOI8, CODES_UTF8, (const char*)in, (char*)out, (size_t)*inlen, (size_t)*outlen, in_readed, out_writed); + *inlen = (int)in_readed; + *outlen = (int)out_writed; + return (res == RECODE_OK)? 0 : -1; +} + +int +UTF8Tokoi8(unsigned char* out, int *outlen, + const unsigned char* in, int *inlen) { + size_t in_readed, out_writed; + RECODE_RESULT res = Recode(CODES_UTF8, CODES_KOI8, (const char*)in, (char*)out, (size_t)*inlen, (size_t)*outlen, in_readed, out_writed); + *inlen = (int)in_readed; + *outlen = (int)out_writed; + return (res == RECODE_OK)? 0 : -1; +} + |