我使用 SQLite for C。我尝试从 c# 应用程序将 UTF-8 字符发送到 .dll,但每次它的工作方式都不同。例如,有时它会添加“değirmenci”,而另一次使用相同的代码会添加“değirmencil”,但我不会更改这个词。有时它会在 UNIQUE 列中添加相同的内容(我认为有一个字符,但它不像 ascii 中的 0x01 那样可见)对不起我的英语。
这是我的 C# 代码;
[DllImport("dllfile.dll", CharSet = CharSet.Unicode)]
static void Main()
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes("değirmenci");
int r;
//
IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length);
IntPtr ch = Tahmin_Baslat();
r = Sozcuk_Ekle(unmanagedPointer);
Console.WriteLine(r);
Console.Read();
//
}
这是我的 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
}
(包括头文件等)它就是这样:http: //i.stack.imgur.com/BJ4fE.png
解决方案
在字节末尾添加 NULL 终止符。byte[] bytes = System.Text.Encoding.UTF8.GetBytes("değirmenci\0"); 像这样。