javascript - ويندوز - شرح الجافا سكربت بالعربي



ريادتكستاسينس في تطبيق متجر ويندوز مع ملف متعدد البايت وجافا سكريبت (1)

أود أن أقرأ ملف كسف في بلدي جافا سكريبت مكتوب ويندوز مخزن التطبيق. إذا كنت تستخدم ريادتكستاسينك أحصل على خطأ عند استخدام بعض ملامح الألماني.

No mapping for the Unicode character exists in the target multi-byte code page.

لقد وجدت حلا في C # هنا ريادتكست من الملف في ترميز أنسي ولكن ليس لدي أي فكرة عن كيفية حلها في جافا سكريبت؟

هل هناك سوميتينغ مثل فئة ترميز في جافا سكريبت؟ إذا قمت بتحويل الملف إلى UTF8 أنه يعمل بشكل جيد، ولكن بلدي العملاء ترغب في استخدام ملف المحفوظة من قبل التفوق. لا يستخدم إكسيل UTF8 بشكل افتراضي.


أبسط سيكون لتحويل الملف إلى أوتف-8 كما يسهل الوصول إليها بواسطة وينجس.

ليس هناك ما يعادل الرمز بالضبط في مكتبة وينجس التي وجدت ل C # (لسبب ما، فإنه لم يتعرض). لا توجد سوى ترميزات بسيطة متاحة لل أوتف-8/16 (L / H).

لذلك، إذا كنت لا تريد تحويل الملف وكنت تستخدم جافا سكريبت، فاستقيم إنشاء مكون وقت تشغيل ويندوز بسيط ( تجول ) يحتوي على السلوك الذي تريده. انها بسيطة جدا إذا كنت تتبع تجول. في الأساس، يمكنك كتابة بعض التعليمات البرمجية في C #، وعندما يتم ذلك وفقا للقواعد، يصبح متوفرا في وينجس كمكون. الرمز الذي تحتاج إلى الكتابة هو بسيط نسبيا أيضا:

public sealed class WinJSEncodingExtension
{
    public IAsyncOperation<string> ReadTextWithEncodingAsync(string appUri, 
             string encodingName) 
    {
        return ReadTextWithEncodingAsyncInternal(appUri, 
                                               encodingName).AsAsyncOperation();
    }

    private async Task<string> ReadTextWithEncodingAsyncInternal(string appUri, 
                    string encodingName)
    {
        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(
                   new Uri(appUri, UriKind.Absolute));
        var buffer = await FileIO.ReadBufferAsync(file);
        byte [] rawBytes = new byte[buffer.Length];
        using (var reader = DataReader.FromBuffer(buffer))
        {
            reader.ReadBytes(rawBytes);
        }
        var encoding = Encoding.GetEncoding(encodingName);
        return encoding.GetString(rawBytes, 0, rawBytes.Length);            
    }
}

حيث أن فئة Task غير متوفرة في وينجس، تقوم بإرجاع واجهة IAsyncOperation<T> التي يتم لفها تلقائيا بواسطة Promise في وينجس.

لقد اختبرته فقط قليلا، ولكن يجب أن تساعدك في طريقك:

var ex = new EncoderComponent.WinJSEncodingExtension();
var ex = ex.readTextWithEncodingAsync("ms-appx:///test1.txt", "UTF-8")
         .then(function (result) {
    console.log(result);    
});

توجد ترميزات صالحة في الجدول في هذه الصفحة.





windows-runtime