我在Windows服务器上使用PostgreSQL 9.5 64位版本。 数据库的字符编码设置为UTF8。
我想创建一个操作多字节字符串的函数。 (例如清洁,更换等)
我复制了C语言逻辑来操纵其他系统中的字符, 该逻辑假设字符代码是sjis。
我不想改变C语言逻辑,所以我想在Postgresql的C语言函数中将UTF8转换为sjis。 像convert_to函数一样。 (但是,由于convert_to函数返回bytea类型,我想用TEXT类型获取它。)
请告诉我如何使用C语言将UTF 8转换为sjis。
创建函数脚本:
mvc
.perform(
post("/some/endpoint")
.param("listOfEnums", String.valueOf(SomeEnum.SOMEENUMCONSTANT), String.valueOf(SomeEnum.SOMEOTHERENUMCONSTANT))
.param("id", "100")
C来源:
CREATE FUNCTION CLEANSING_STRING(character varying)
RETURNS character varying AS
'$libdir/MyFunc/CLEANSING_STRING.dll', 'CLEANSING_STRING'
LANGUAGE c VOLATILE STRICT;
答案 0 :(得分:1)
成功地通过问题评论教导我。
#include <mb/pg_wchar.h> //Add to include.
...
Datum CLEANSING_STRING(PG_FUNCTION_ARGS)
{
// Get Arg
text *arg1 = (text *)PG_GETARG_TEXT_P(0);
// Text to Char[]
char *arg;
arg = text_to_cstring(arg1);
// UTF8 to Sjis
Char *sjisChar[] = pg_server_to_any(arg, strlen(arg), PG_SJIS);
// Copied from other system.(Assumes that the character code is sjis.)
cleansingString(sjisChar);
replaceStrimg(sjisChar);
// Sjis to UTF8
arg = pg_any_to_server(sjisChar, strlen(sjisChar), PG_SJIS); //It converts from SJIS to server (UTF 8), the third argument sets the encoding of the conversion source.
//Char[] to Text and Return
PG_RETURN_TEXT_P(cstring_to_text(arg));
}