لماذا جافا BufferedReader() لا تقرأ العربية و الحروف الصينية بشكل صحيح ؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

أحاول قراءة الملف التي تحتوي على اللغة العربية واللغة الإنجليزية حرفا في كل سطر و آخر الملف الذي يحتوي على اللغة الإنجليزية والصينية الأحرف في كل سطر.ومع ذلك الشخصيات العربية و الصينية فشلت في إظهار بشكل صحيح - انهم فقط تظهر علامات استفهام.أي فكرة كيف يمكنني حل هذه المشكلة ؟

هنا هو رمز تستخدم القراءة:

try {
        String sCurrentLine;
        BufferedReader br = new BufferedReader(new FileReader(directionOfTargetFile));
        int counter = 0;

        while ((sCurrentLine = br.readLine()) != null) {
            String lineFixedHolder = converter.fixParsedParagraph(sCurrentLine);
            System.out.println("The line number "+ counter
                               + " contain : " + sCurrentLine);
            counter++;
        }
    }

الطبعة 01

بعد قراءة الخط والحصول على العربية و الصينية كلمة يمكنني استخدام وظيفة ترجمتها ببساطة عن طريق البحث عن بالنظر إلى النصوص العربية في ArrayList (التي تحتوي على جميع الكلمات المتوقع) (باستخدام indexOf();طريقة).ثم عند كلمة مؤشر وجدت انها تستخدم للاتصال الكلمة الإنجليزية التي لديها نفس المؤشر في آخر Arraylist.ومع ذلك هذا البحث يعود دائما كاذبة لأنه فشل عند البحث في علامات استفهام بدلا من العربية و الحروف الصينية.حتى نظام بلدي.للخروج.println الطباعة يظهر لي بالقيم الخالية واحد لكل فشل في ترجمتها.

*أنا باستخدام Netbeans 6.8 نسخة ماك IDE


الطبعة 02

هنا هو رمز البحث عن الترجمة:

        int testColor = dbColorArb.indexOf(wordToTranslate);
        int testBrand = -1;
        if ( testColor != -1 ) {
            String result = (String)dbColorEng.get(testColor);
            return result;
        } else {
            testBrand = dbBrandArb.indexOf(wordToTranslate);
        }
        //System.out.println ("The testBrand is : " + testBrand);
        if ( testBrand != -1 ) {
            String result = (String)dbBrandEng.get(testBrand);
            return result;
        } else {
            //System.out.println ("The first null");
            return null;
        }

أنا فعلا البحث 2 Arraylists والتي قد تحتوي على الكلمة المطلوبة لترجمة.إذا فشلت في العثور عليها في كل ArrayLists ، ثم null يتم إرجاعها.


الطبعة 03

عندما كنت التصحيح وجدت أن خطوط قراءتها يتم تخزينها في متغير سلسلة النحو التالي:

 "3;0000000000;0000001001;1996-06-22;;2010-01-27;����;;01989;������;"

الطبعة 03

الملف أنا أقرأ وقد أعطيت لي بعد ذلك تم تعديل من قبل برنامج آخر (الذي لا أعرف شيء عن بجانب انها مصنوعة في VB) البرنامج الحروف العربية لا تظهر بشكل صحيح على ما يبدو.عندما راجعت ترميز ملف Notepad++ وبينت أنه ANSI.ومع ذلك عندما تحويله إلى UTF8 (الذي حل محل الحروف العربية مع اللغة الإنجليزية واحد) ومن ثم تحويله مرة أخرى إلى ANSI أصبحت اللغة العربية علامات استفهام!

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

المحلول

FileReader جافادوك:

الراحة فئة قراءة حرف الملفات.منشئات من هذه الفئة نفترض أن الأحرف الافتراضية الترميز الافتراضي بايت-حجم المخزن المؤقت المناسبة.لتحديد هذه القيم نفسك ، بناء InputStreamReader على فيلينبوتستريام.

لذلك:

Reader reader = new InputStreamReader(new FileInputStream(fileName), "utf-8");
BufferedReader br = new BufferedReader(reader);

إذا كان هذا لا يزال لا يعمل, ثم ربما لديك وحدة التحكم لم يتم تعيين بشكل صحيح عرض UTF-8 أحرف.التكوين يعتمد على IDE استخدام بسيط بدلا من ذلك.

تحديث : في التعليمات البرمجية أعلاه استبدال utf-8 مع cp1256.هذا يعمل بشكل جيد بالنسبة لي (ويندوز إكس بي ، JDK6)

ولكن أنصح أن كنت تصر على الملفات التي يتم إنشاؤها باستخدام UTF-8.لأن cp1256 لن تعمل الصيني وسيكون لديك مشاكل مماثلة مرة أخرى.

نصائح أخرى

فمن الأرجح قراءة المعلومات بشكل صحيح, ومع ذلك الإخراج الخاص بك تيار ربما لا UTF-8 و لذلك أي الحرف الذي لا يمكن أن تظهر في إخراج مجموعة الأحرف يتم استبدال'؟'.

يمكنك التأكد من هذا عن طريق الحصول على كل حرف و طباعة الحرف الترتيبي.

public void writeTiFile(String fileName,String str){
    try {
        FileOutputStream out = new FileOutputStream(fileName);
        out.write(str.getBytes("windows-1256"));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top