WinJS 中的 System.Text.Encoding

Posted

技术标签:

【中文标题】WinJS 中的 System.Text.Encoding【英文标题】:System.Text.Encoding in WinJS 【发布时间】:2013-08-13 12:27:20 【问题描述】:

有没有等价的

System.Text.Encoding.UTF8.GetString(fileContent) 

在 WinJS(用 javascript/html 编写的 Windows 8 应用商店应用程序)中?

编辑。 fileContent 是一个字节数组。

【问题讨论】:

什么是文件内容,流?大批?你想完成什么? fileContent 是一个字节数组。我正在尝试将其转换为字符串。 我正在尝试在这个问题中读取文件:***.com/questions/18206590/… 但在 WinJS 中 在下方查看我的回答,希望对您有所帮助 【参考方案1】:

WinJS 中没有严格等价的System.Text.Encoding.UTF8.GetString,但您可以尝试如下实现文件读取到字符串:

file.openReadAsync().done(function (stream) 
   var blob = MSApp.createBlobFromRandomAccessStream(file.contentType, stream);
   var reader = new FileReader();

   reader.onload = function(event) 
      var fileAsText = event.target.result;
   ;

   reader.readAsText(blob, 'UTF-8');
);

在大多数情况下(通过 XHR 上传文件,显示文件)您不需要将文件内容作为文本,因此只需使用 Blob

【讨论】:

Ok 效果很好,但是您的代码中有一个小错误:您忘记在 openReadAsync 后添加括号(应该是 file.openReadAsync().done(...)) 还有一个问题——你碰巧知道如何处理 unicode 符号(我正在阅读的文件包含波兰字母) 谢谢,这是我从 Excel 中读取带有荷兰语字符的文本文件的唯一方法(另存为编码 LATIN1)【参考方案2】:

CryptographicBuffer.convertBinaryToString 可以用于此。

var crypt = Windows.Security.Cryptography;
var bytes; // = new Uint8Array(100);
// TODO - set bytes variable with uint8array
var buffer = crypt.CryptographicBuffer.createFromByteArray(bytes);
var text = crypt.CryptographicBuffer.convertBinaryToString(
    crypt.BinaryStringEncoding.utf8, buffer);

【讨论】:

使用你的方法我得到运行时异常:“目标多字节代码页中不存在 Unicode 字符的映射。”

以上是关于WinJS 中的 System.Text.Encoding的主要内容,如果未能解决你的问题,请参考以下文章

WinJS 中的音频分析

尝试从 WinJS 读取 C# WinRT 组件中的空字符串时出现异常

从阵列winjs更新列表视图中的分数

停止视频在WinJS捕捉编程

WinJS 4.0兼容AngularJSReactBootstrap和Knockout

JQuery 和 WinJS - 承诺 [关闭]