Самым простым было бы преобразовать файл в UTF-8, так как к нему легко получить доступ WinJS.
Точного эквивалента коду в библиотеке WinJS, которую вы нашли для C#, нет (по какой-то причине он не выставлен). Для UTF-8/16(L/H) доступны только простые кодировки.
Итак, если вы не хотите преобразовывать файл и используете JavaScript, я бы создал простой компонент среды выполнения Windows (пошаговое руководство), которое содержит требуемое поведение. Это довольно просто, если следовать пошаговому руководству. По сути, вы пишете какой-то код на C#, и когда вы делаете это в соответствии с правилами, он становится доступным в WinJS как компонент. Код, который вам нужно написать, также относительно прост:
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
недоступен в WinJS, он возвращает интерфейс IAsyncOperation<T>
, который автоматически обертывается Promise
в WinJS.
Я только немного протестировал его, но он должен помочь вам на вашем пути:
var ex = new EncoderComponent.WinJSEncodingExtension();
var ex = ex.readTextWithEncodingAsync("ms-appx:///test1.txt", "UTF-8")
.then(function (result) {
console.log(result);
});
Допустимые кодировки указаны в таблице на эта страница.
person
WiredPrairie
schedule
31.01.2014