मुझे पता है कि यह एक साल पहले पूछा गया था, लेकिन मुझे अन्य उत्तरों पसंद नहीं हैं इसलिए मैं जवाब देने जा रहा हूं। यहाँ कैसे हम अपने स्रोत में कर दिया गया है:
wchar_t * JavaToWSZ(JNIEnv* env, jstring string)
{
if (string == NULL)
return NULL;
int len = env->GetStringLength(string);
const jchar* raw = env->GetStringChars(string, NULL);
if (raw == NULL)
return NULL;
wchar_t* wsz = new wchar_t[len+1];
memcpy(wsz, raw, len*2);
wsz[len] = 0;
env->ReleaseStringChars(string, raw);
return wsz;
}
संपादित: यह समाधान प्लेटफार्मों पर अच्छी तरह से काम जहां wchar_t 2 बाइट्स है, कुछ प्लेटफॉर्म एक 4 बाइट wchar_t जिस स्थिति में इस समाधान काम नहीं करेगा की है।
आप जेएसटींग को यूटीएफ -8 में परिवर्तित करने का सुझाव दे रहे हैं और फिर यूटीएफ -16 में परिवर्तित कर रहे हैं? क्या यह सचमुच आवश्यक है? – Rup
@Rup jstrings पहले से ही यूटीएफ -8 हैं: "जेएनआई विभिन्न स्ट्रिंग प्रकारों का प्रतिनिधित्व करने के लिए संशोधित यूटीएफ -8 तारों का उपयोग करता है। संशोधित यूटीएफ -8 स्ट्रिंग जावा वीएम द्वारा उपयोग किए जाने वाले समान हैं। संशोधित यूटीएफ -8 तारों को एन्कोड किया गया है ताकि चरित्र अनुक्रम जिनमें केवल गैर-शून्य ASCII वर्ण होते हैं, प्रति वर्ण केवल एक बाइट का उपयोग करके प्रदर्शित किया जा सकता है, लेकिन सभी यूनिकोड वर्णों का प्रतिनिधित्व किया जा सकता है ..... जावा वीएम मानक यूटीएफ -8 के चार-बाइट प्रारूप को नहीं पहचानता है; इसके बजाए अपने दो-बार-तीन-बाइट प्रारूप का उपयोग करता है। " –
@ b1naryatr0phy वास्तव में? jni.h मेरी प्रणाली पर (दोनों 1।6 और 1.7) में 'टाइपिफ अप शॉर्ट जचर' है, जो मुझे यूटीएफ -16 की तरह दिखता है। – Rup