2013-04-02 2 views
6

हम नीचे स्ट्रिंग जो वास्तव में DB में एक नाम है को बचाने के लिए, हम कुछ API कॉल कर सकते हैं और हम इस नाम मिल कोशिश कर रहे हैं ले जा:चरित्र 6 बाइट्स

株式会社 エ ス · ダ ブ リ ュ ー · コ ミ ュ ニ ケ ー シ ョ ン ズ

जबकि हमारे कोड के माध्यम से बचत (सर्वलेट में के रूप में - - हाइबरनेट डेटाबेस), हम कोई त्रुटि मिलती है:

Caused by: java.sql.BatchUpdateException: ORA-12899: value too large for column "NAME_ON_ACCOUNT" (actual: 138, maximum: 100) 

इस 23 अक्षर है, लेकिन लगता है कि यह चरित्र प्रति 6 बाइट्स ले रहा है, यह है कि केवल यह 138

+०१२३५१६४१०६१ होगा

कोड नीचे मुझे 69 देता है:

byte[] utf8Bytes = string.getBytes("UTF-8");  
System.out.println(utf8Bytes.length); 

और यह मुझे 92 देता है:

byte[] utf8Bytes = string.getBytes("UTF-32"); 
System.out.println(utf8Bytes.length); 

मैं निश्चित रूप से NLS_CHARACTERSET की जाँच करें और आईओ कक्षाएं देखते हैं लेकिन क्या तुमने कभी एक चरित्र 6 बाइट्स लेने देखा है होगा? किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।

+3

इस पढ़ें और देखें अगर यह मदद करता है: http://stackoverflow.com/questions उपरोक्त लिंक के लिए/6063148/जावा-यूनिकोड-जहां-टू-खोज-उदाहरण-एन-बाइट-यूनिकोड-वर्ण – Crontab

+3

+1। उल्लेख के बारे में ध्यान दें ([इस उत्तर] [http://stackoverflow.com/a/6066442/240733) पर टिप्पणी [) सीईएसयू -8 एन्कोडिंग **] (http: //en.wikipedia .org/विकी/सीईएसयू -8), जो ओरेकल डीबी का उपयोग करने के लिए कहा जाता है और जिसके परिणामस्वरूप 6-बाइट "यूटीएफ -8" वर्ण हो सकते हैं। – stakx

+0

क्या आप CHINESE_CHINA.WE8ISO8859P1 का उपयोग कर रहे हैं? –

उत्तर

3

यह शायद स्ट्रिंग में HTML इकाइयां रखता है। 燃 या संभवतः यूआरएल शैली, %8C%9A की तरह। या शायद यूटीएफ 7, [Ay76b की तरह। (मैंने उन मानों को बनाया है, लेकिन आपके वास्तविक लोग समान होंगे)। चरित्र एन्कोडिंग के साथ किसी भी ढांचे पर भरोसा करना हमेशा दर्द होता है क्योंकि इसके लेखक शायद यू.एस. या यूरोपीय थे, दोनों साधारण एएनएसआई के साथ पर्याप्त थे जहां एक बाइट एक चरित्र के बराबर होता है। यदि आप अपने एन्कोडिंग को समझने में कामयाब रहे हैं और इसे वास्तविक यूटीएफ 8 या यहां तक ​​कि यूटीएफ 16 में परिवर्तित कर दिया है, तो यह इस विशेष मामले में कम जगह लेगा।

+0

@Alex - नहीं, मैं चीनी चीन एन्कोडिंग का उपयोग नहीं कर रहा हूं। –

0

आप शायद सचमुच है:

\u682a\u5f0f\u4f1a\u793e\u30a8\u30b9\u30fb\u30c0\u30d6\u30ea\u30e5\u30fc\u30fb\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30ba 

देखें:

"\u682a\u5f0f\u4f1a\u793e\u30a8\u30b9\u30fb\u30c0\u30d6\u30ea\u30e5\u30fc\u30fb\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30ba".length(); 
//23, or 69 UTF-8 bytes 

बनाम:

"\\u682a\\u5f0f\\u4f1a\\u793e\\u30a8\\u30b9\\u30fb\\u30c0\\u30d6\\u30ea\\u30e5\\u30fc\\u30fb\\u30b3\\u30df\\u30e5\\u30cb\\u30b1\\u30fc\\u30b7\\u30e7\\u30f3\\u30ba".length(); 
//138, or 138 UTF-8 bytes 
संबंधित मुद्दे