Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将UTF-8字符C#发送到C无法正常工作_C#_Sqlite_Utf 8_Com Interop - Fatal编程技术网

将UTF-8字符C#发送到C无法正常工作

将UTF-8字符C#发送到C无法正常工作,c#,sqlite,utf-8,com-interop,C#,Sqlite,Utf 8,Com Interop,我使用SQLite for C。我尝试从C#app向.dll发送UTF-8字符,但每次都不同。例如,有时它会加上“değirmenci”,而另一次它用同样的代码加上“değirmencil”,但我不会改变这个词。有时它会在UNIQUE列中添加samething(我认为有一个char,但它不像ascii中的0x01那样可见) 对不起,我的英语不好 这是我的c代码 这是我的C代码 int Sozcuk_Ekle(const char* kok,int tip_1=1,int tip_2=0,

我使用SQLite for C。我尝试从C#app向.dll发送UTF-8字符,但每次都不同。例如,有时它会加上“değirmenci”,而另一次它用同样的代码加上“değirmencil”,但我不会改变这个词。有时它会在UNIQUE列中添加samething(我认为有一个char,但它不像ascii中的0x01那样可见) 对不起,我的英语不好

这是我的c代码

这是我的C代码

    int Sozcuk_Ekle(const char* kok,int tip_1=1,int tip_2=0,int tip_3=0)
{
    sqlite3 *ch; 
    int rc; 
    char *HataMsj = 0; 

    rc = sqlite3_open(veritabani, &ch); // Veritabanının açılması

    if( rc )
    {
        return HATA_DEGERI;
    }

    char buff[strlen(kok) + 64];
    sprintf(buff,"INSERT INTO kokler (kok,tip_1,tip_2,tip_3) VALUES('%s',%d,%d,%d)",kok,tip_1,tip_2,tip_3); // Verilerin Birleştirilmesi
    sqlite3_exec(ch,buff,GeriBildirim,0,&HataMsj); // Komutun Yürütülmesi
    sqlite3_close(ch); // Veritabanını kaynaklarının serbest bırakılması
    return DOGRU_DEGERI; // Doğru Dönder
}
(包括头文件等) 事情就是这样的:

解决方案
将空终止符添加到字节的结尾。 byte[]bytes=System.Text.Encoding.UTF8.GetBytes(“değirmenci\0”);像这样。

检查DllImport属性(应该是Cdecl)。并在UTF-8字符串中添加空终止符:

byte[] bytes = System.Text.Encoding.UTF8.GetBytes("değirmenci" + '\0');

这将向生成的UTF-8字符串(本机.NET字符串不需要该字符串)添加空终止符。

您将问题命名为“SQLite无法正常工作”。我敢打赌SQLite运行良好,但您的代码运行不正常。不过很抱歉,我不知道你代码中的错误是什么。但是请注意,您的问题并不清楚您的问题是在
C
代码中还是在
C#
中,或者两者都有。您可能会澄清这一点。@mah谢谢您,我更改了“人物”的标题,我认为它在C代码中,但我不太确定,因此我无法指定哪种语言出错。您应该检查DllImport属性中的,我认为是Cdecl。还要检查是否需要手动将空终止符添加到UTF-8字符串中(尝试一些简单的方法,如
“değirmenci”+'\0'
)。@Jigsore我认为它解决了我的问题,但我需要测试它是否有效我用解决方案编辑我的帖子。顺便说一句,谢谢你,我想他们会自动添加“\0”。顺便说一句,我说的是更改这部分:
byte[]bytes=System.Text.Encoding.UTF8.GetBytes(“değirmenci”+“\0”)
byte[] bytes = System.Text.Encoding.UTF8.GetBytes("değirmenci" + '\0');