سؤال

لدي قاعدة بيانات مكانية postgresql Postgis التي تحتوي على أعمدة نص العبرية. يعمل النظام على Ubuntu، وكل شيء يعمل بلا عيوب مع UTF-8.

أحاول تفريغ بعض الجداول في الشكل للحصول على برنامج Windows يمكنه فقط قراءة سلاسل Windows-1255. لسوء الحظ، pgsql2shp. لا يوجد لديه خيار الترميز، على الرغم من shp2pgsql. لديه، لذلك يقوم برنامج Werdnows بقراءة UTF-8 Carsed ك Windows-1255 إعطاء Gibberish.

أحاول إنشاء عرض Windows-1255 على أعمدة الجدول، ولكن لم يتم العثور على طريقة للقيام بذلك دون إفساد قاعدة البيانات.

أي أفكار كيفية تحويل الجداول؟

شكرا،

آدم

تحديث:

اعتقدت أن هذا تم حل هذا (انظر إجابتي الخاصة)، بقلم ما زلت أحصل على أخطاء عشوائية مثل:

ERROR:  character 0x9f of encoding "WIN1255" has no equivalent in "UTF8"

ما أريده هو نوع من وظيفة حذف: مثل iconv-c علم، والتي ببساطة لا نسخ الأحرف المصدر التي لا تحتوي على ترميز مستهدف INT مكافئ.

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

المحلول

إذا كنت تعني حقا ASCII، فلا يمكنك إنقاذ الأحرف العبرية. ASCII ليست سوى حرف 7 بت إعداد \x7F.

إذن ما نوع السلاسل التي يقرأها برنامج Windows هذا؟ إذا كان ASCII، أو Latin-1، فلن تحصل أبدا على العبرية. من المرجح أن "صفحة" "رمز النظام الحالي"، أيضا (مضللة ولكن عادة عادة) المعروفة في Windows كما 'ansi'.

إذا كان الأمر كذلك، فسيتعين عليك تعيين صفحة رمز النظام على كل آلة تقوم بتشغيل برنامج Windows للعبرية (رمز صفحة 1255). أعتقد أن ملفات SHP ليس لها معلومات ترميز الأحرف على الإطلاق، وبالتالي فإن الشكل الإضافي لن يعمل فقط بشكل صحيح على الآلات مع مجموعة صفحة الرموز هذه (الافتراضي فقط في اللغة الإسرائيلية فقط). (فيما يبدو .dbf يمكن أن يكون الصادرات مرافقة .cpg ملف لتحديد الترميز، ولكن ليس لدي أي فكرة إذا كان البرنامج الذي تستخدمه يدعم ذلك.)

ثم يجب عليك تصدير البيانات كإرماد كود صفحة 1255، أو الأقرب الذي ستحصل عليه في Postgres، ISO-8859-8. نظرا لأن البرنامج النصي للتصدير لا يبدو أن لديه أي خيار للقيام بأي شيء سوى أخذ البايتات مباشرة من قاعدة البيانات، فستضطر إلى إنشاء قاعدة بيانات في ترميز ISO-8859-8 ونقل جميع البيانات من قاعدة بيانات UTF-8 إلى 8859-8 واحد، إما مباشرة من خلال الاستعلامات أو، ربما أسهل، باستخدام pgdumpall وتحميل SQL في المفكرة ثم أعد حفظه بأنه العبرية بدلا من UTF-8 (قم بضبط أي إعدادات ترميز مدرجة في SQL DDL كما تذهب).

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

نصائح أخرى

من داخل البرنامج النصي باش:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
do
        if [[ -n $ENCODING ]]; then
                export PGCLIENTENCODING=$ENCODING;
                break
        else
                echo 'Invalid encoding.'
        fi
done

ال export PGCLIENTENCODING=$ENCODING; بيان يفعل الحيلة.

فحص جداول الترميز العبرية وجداول الصفحات، يمكنك أن ترى ذلك ISO-8859-8. و Windows-1255. ليس لديهم رسم خرائط ل 0x9f.

يمكن أن تستند البيانات التي تحاول تحويلها إلى كبار السن Codepage 862.، صفحة رمز للعبرية تحت DOS.Codepage 862 خرائط الكود 0x9f لحرف Unicode "حرف صغير لاتيني F مع هوك"، 0x0192.

يمكنك التحقيق في أخطاء "عشوائية" مشابهة، ويقرر تعيين رموز غير Windows-1255 في البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top