gpt4 book ai didi

javascript - 带有多字节文件和 JavaScript 的 Windows 应用商店应用程序中的 ReadTextAsync

转载 作者:行者123 更新时间:2023-11-30 12:49:23 25 4
gpt4 key购买 nike

我想在我的 javascript 编写的 Windows 商店应用程序中读取 CSV 文件。如果我使用 readTextAsync,我会在使用某些德语变音符号时收到错误消息。

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

我在这里找到了 C# 中的解决方案 ReadText from file in ANSII encoding但我不知道如何用 JavaScript 解决它?

JavaScript 中有类似 Encoding 类的东西吗?如果我将文件转换为 UTF8,它工作正常,但我的客户想使用由 excel 保存的文件。默认情况下,Excel 不使用 UTF8。

最佳答案

最简单的方法是将文件转换为 UTF-8,因为 WinJS 可以轻松访问它。

没有与您在 WinJS 库中为 C# 找到的代码完全相同的代码(出于某种原因,它没有公开)。 UTF-8/16(L/H) 只有简单的编码可用。

因此,如果您不想转换文件并且使用的是 JavaScript,我会创建一个简单的 Windows 运行时组件 (walkthrough),其中包含您想要的行为。如果您按照演练进行操作,这将非常简单。基本上,您用 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 中不可用,它返回一个接口(interface) 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);
});

有效编码在 this 上的表格中页面。

关于javascript - 带有多字节文件和 JavaScript 的 Windows 应用商店应用程序中的 ReadTextAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com