awtk icon indicating copy to clipboard operation
awtk copied to clipboard

str_t字符串模块可否添加转换为GBK编码的API?

Open ufbycd opened this issue 3 years ago • 6 comments

国内市面上很多包含字库的打印模块所使用的编码是GBK的。 所以,如果str_t字符串模块有现成的转换为GBK编码的API将方便很多!

ufbycd avatar Feb 17 '22 01:02 ufbycd

随便添加类似printf那样的格式化字符串API也很有用: ret_t str_format(str_t* str, const char* fmt, ...); str_format(str, "count: %d", 3);

ufbycd avatar Feb 17 '22 02:02 ufbycd

可以看 awtk\src\charset 里面提供的api

sosotan avatar Feb 23 '22 02:02 sosotan

随便添加类似printf那样的格式化字符串API也很有用:

/**
 * @method str_format
 * 通过格式设置字符串。
 * @param {str_t*} str str对象。
 * @param {uint32_t} size format生成的字符串的最大长度(用于预习分配内存)。
 * @param {const char*} format 格式。
 *
 * @return {ret_t} 返回RET_OK表示成功,否则表示失败。
 */
ret_t str_format(str_t* str, uint32_t size, const char* format, ...);

/**
 * @method str_append_format
 * 通过格式追加字符串。
 * @param {str_t*} str str对象。
 * @param {uint32_t} size format生成的字符串的最大长度(用于预习分配内存)。
 * @param {const char*} format 格式。
 *
 * @return {ret_t} 返回RET_OK表示成功,否则表示失败。
 */
ret_t str_append_format(str_t* str, uint32_t size, const char* format, ...);

xianjimli avatar Feb 24 '22 03:02 xianjimli

可以看 awtk\src\charset 里面提供的api

哦,原来在这里。不错!

ufbycd avatar Mar 03 '22 02:03 ufbycd

随便添加类似printf那样的格式化字符串API也很有用:

/**
 * @method str_format
 * 通过格式设置字符串。
 * @param {str_t*} str str对象。
 * @param {uint32_t} size format生成的字符串的最大长度(用于预习分配内存)。
 * @param {const char*} format 格式。
 *
 * @return {ret_t} 返回RET_OK表示成功,否则表示失败。
 */
ret_t str_format(str_t* str, uint32_t size, const char* format, ...);

/**
 * @method str_append_format
 * 通过格式追加字符串。
 * @param {str_t*} str str对象。
 * @param {uint32_t} size format生成的字符串的最大长度(用于预习分配内存)。
 * @param {const char*} format 格式。
 *
 * @return {ret_t} 返回RET_OK表示成功,否则表示失败。
 */
ret_t str_append_format(str_t* str, uint32_t size, const char* format, ...);

Well done!

ufbycd avatar Mar 03 '22 02:03 ufbycd

经测试awtk\src\charset里的APIencoding_utf8_to_gbk发现,在X86_64 linux平台上转换成功、但在arm linux平台上的转换总失败。 怀疑是此平台的glibc编译的iconv支持有问题,于是在encoding.c文件的开头加入#undef LINUX以强制不使用iconv后字符串转换成功。 故不建议在linux平台默认使用iconv,而由用户选择是使用iconv还是awtk内部支持。

ufbycd avatar Mar 03 '22 08:03 ufbycd