我正在使用C編寫Adobe AIR的本機擴展。稍後應將代碼移植到其他平臺。 在我的C面功能我是從空氣中得到一個字符串這樣在C中使用utf8字符串
uint32_t len;
const uint8_t * str = 0;
if(FRE_OK == FREGetObjectAsUTF8(argv[0], &len, &str))
{
//Here i need to pass a string as an argument to other function
printf("Got string %s", str); //Showing weird letters instead of str
}
FREGetObjectAsUTF8返回應表示爲const uint8_t一個UTF8編碼的字符串。我在MacOS和XCode工作,uint8_t被定義爲unsigned char。問題在於一堆c代碼,它需要一個簡單的char *作爲參數。我不需要任何Unicode字母,我只使用拉丁字母和數字。
我試圖投沒有運氣的類型。作爲例子
char buffer[512];
sprintf(buffer, "%s", (char*)str); //Same weird letters here
但如果我遍歷字符串我得到正確的值
for(i=0; i<len; i++)
printf("%s", str[i]); // Normal value
所以畝的問題是:我怎麼能傳遞一個UTF8字符串給需要一個簡單的符號字符的功能? 在一個事實中,我可以嘗試在C++中創建函數,並將C部分與「extern」一起使用,但純C解決方案將更可取。
我從空中傳遞字符串「initapp」,如果我將它返回運行時,它會顯示正確的值「initapp」。在我的C代碼,我想它傳遞函數,它預計的char *作爲參數
FREObject initApp(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
uint32_t len;
const uint8_t * str = 0;
if(FRE_OK == FREGetObjectAsUTF8(argv[0], &len, &str))
{
/*
I have about 40 functions and most of them working with ASCII strings
*/
executeCommand((const char*)str);
FREObject result;
FRENewObjectFromUTF8(len, str, &result);
return result; //It's ok. Correct string
}
return NULL;
}
但在我的功能,而不是「initapp」我越來越怪異的各種字母(每次都不同),喜歡嘗試輸出圖像的一部分或不正確的變量。
任何幫助將不勝感激。
你確定代碼示例真的代表你的代碼嗎? 'sprintf'似乎很好。然而,你所說的'printf'不可能工作 - 你給它一個單獨的字符並使用'%s',它應該會崩潰,UTF-8或不。 – ugoren 2012-04-29 07:30:37
爲什麼首先使用uint8_t?無論如何,你會得到什麼奇怪的信件?而你說「我不需要Unicode,我只使用拉丁文」,但拉丁文是Unicode的一部分,所以你已經在使用它了! – 2012-04-29 07:30:52
UTF8字符串來自FREGetObjectAsUTF8作爲空氣框架的一部分。是的,我知道拉丁語是unicode的一部分。奇怪的字母像打印內存中的垃圾 – 2012-04-29 07:38:57