what tutorial example development create apps app javascript windows-8 windows-runtime

javascript - tutorial - what is uwp app



ReadTextAsync en la aplicaciĆ³n Windows Store con archivos multibyte y JavaScript (1)

Me gustaría leer un archivo CSV en mi aplicación javascript escrita en Windows Store. Si uso readTextAsync aparece un error al usar algunos diéresis alemanes.

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

Encontré una solución en C # aquí ReadText del archivo en codificación ANSII pero no tengo idea de cómo resolverlo en JavaScript.

¿Hay algo así como la clase de codificación en JavaScript? Si convierto el archivo a UTF8, funciona bien, pero a mi cliente le gustaría usar un archivo guardado por Excel. Excel no usa UTF8 por defecto.


Lo más simple sería convertir el archivo a UTF-8 ya que WinJS puede acceder fácilmente a él.

No hay un equivalente al código exactamente en la biblioteca de WinJS que encontró para C # (por alguna razón, no está expuesto). Solo hay codificaciones simples disponibles para UTF-8/16 (L / H).

Por lo tanto, si no desea convertir el archivo y está usando JavaScript, crearía un componente simple de Windows Runtime ( tutorial ) que contiene el comportamiento que desea. Es bastante simple si sigues el tutorial. Básicamente, escribe un código en C #, y cuando lo hace según las reglas, está disponible en WinJS como componente. El código que necesitarías escribir es relativamente directo también:

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); } }

Como la clase Task no está disponible en WinJS, devuelve una interfaz IAsyncOperation<T> que se envuelve automáticamente con una Promise en WinJS.

Solo lo he probado un poco, pero debería ayudarte en tu camino:

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

Las codificaciones válidas están en la tabla en esta página.