أحرف متعددة البايت فاسدة ل ????عند قراءة من قاعدة البيانات ونشرها إلى صفحة أسب باستخدام هتبورلكونكتيون

StackOverflow https://stackoverflow.com/questions/5050894

سؤال

في رمز جافا الخاص بي ، وأنا استرداد بعض البيانات متعددة البايت من قاعدة البيانات وجعل بعض شمل دوم ، مع تلك البيانات كقيمة بعض العقدة ثم تحويل دوم إلى سلسلة ونشر بيتيست إلى صفحة أسب عبر هتبورلكونكتيون ، ولكن بطريقة أو بأخرى في نهاية المتلقي البيانات تظهر كما ????بدلا من بعض القيم متعددة البايت.يرجى اقتراح ما يجب القيام به.

الأشياء التي أفعلها بالفعل..

1) لقد وضعت -Dfile.encoding =UTF8 كما خاصية النظام 2) أثناء استخدام TransformerFactory لتحويل بلدي شمل دوم إلى سلسلة ، لقد وضعت

 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")

للتأكد من أن الترميز هو الصحيح هناك.يرجى اقتراح أين أنا على خطأ.

@جون السكيت عدد قليل من الأشياء لإضافة هنا...1) أنا الحصول على البيانات من قاعدة البيانات بشكل صحيح 2) يبدو شمل تحولت أيضا أن تكون مناسبة ، كما راجعت عن طريق حفظه إلى نظام الملفات المحلي.
للنشر في وقت سابق كنت أستخدم شيئا مثل

'dout = new DataOutputStream(urlconn.getOutputStream());'  
 'dout.write(strXML.getBytes());' 
 'dout.write(strXML);' 

والبيانات الناتجة في نهاية المتلقي تم الحصول على تحويلها إلى ?????ولكن بعد ذلك تحولت إلى
'

dout=new OutputStreamWriter(urlconn.getOutputStream(),"UTF8");' 
'dout.write(strXML);' 

ثم يبدو أن البيانات في نهاية جهاز الاستقبال مناسبة ...ولكن المشكلة تحدث مع الطريقة التي يتم التعامل معها في نهاية المتلقي في هذه الحالة.في بلدي استقبال رمز آسيا والمحيط الهادئ أنا باستخدام objStream.WriteLine (oXMLDom.xml) ...وهنا يفشل ويبدأ في إعطاء خطأ خادم داخلي...يرجى اقتراح ما هو الخطأ في النهج الثاني.

هل كانت مفيدة؟

المحلول

هناك الكثير من التحويلات المحتملة الجارية هناك.يجب عليك التحقق من البيانات في كل خطوة:

  • تحقق من أنك تحصل عليه من قاعدة البيانات بشكل صحيح
  • انظر ما يبدو شمل تحولت مثل
  • مشاهدة ما يذهب عبر الشبكة (بما في ذلك رؤوس هتب)
  • تحقق بالضبط ما تحصل عليه في آسيا والمحيط الهادئ

لا تطبع السلاسل فقط كما سلاسل-تسجيل قيمة يونيكود من كل حرف ، عن طريق الصب ل int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top