本文讲的是解决UWP文本GBK打开乱码错误,如何去读取GBK,包括网页GBK。最后本文给出一个方法追加文本。

我使用NotePad记事本保存文件,格式ASCII,用微软示例打开文件方式读取,出现错误

在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符

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

这个问题看来很简单,不就是编码错误,可以我就弄了一晚上

我先换个说法,让大家容易搜索到

  • UWP 读ASCII错误

  • UWP read ASCII

  • UWP GBK

  • UWP 读取记事本

  • UWP 访问GBK网页乱码

  • UWP 乱码

  • UWP GB2312 乱码

  • UWP 网页乱码

其实不知道垃圾wr怎么想,现在没法读ASCII,官方给的,直接错

用了nos大神的代码http://blog.csdn.net/nomasp/article/details/50310357,也是报错

用了我csdn博客置顶代码,就直接乱码 所有中文代为 “?”

查了一下WPF使用默认可以读,也就是我们保存时GBK,查询到Encoding没有GBK,没有默认

于是我就在网上找,很久没找到,但是找到http://www.cnblogs.com/yffswyf/p/4826207.html,写到一半我就不想写,好难

在网上看到Encoding.GetEncoding(0)默认,于是我找了GetEncoding,原来有string,那么Encoding gbk = Encoding.GetEncoding("GBK");

报错

‘GBK’ is not a supported encoding name.

看来这个也不可以,我觉得我要写个转换

最后发现

https://bbs.uwp.ac.cn/?/article/43


//使用CodePagesEncodingProvider去注册扩展编码。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

//注册GBK编码

Encoding encodingGbk =Encoding.GetEncoding("GBK");

我们在读取之前判断我们的编码,这个简单可以使用


        private static Encoding AutoEncoding(byte[] bom)

        {

            if (bom.Length != 4)

            {

                throw new ArgumentException();

            }

            // Analyze the BOM

            if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;

            if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;

            if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE

            if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE

            if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return Encoding.UTF32;

            return Encoding.ASCII;

        }

这没有GBK所以我们只好通过一个垃圾方法。

用Windows.Storage.FileIO.ReadTextAsync如果错误了,就使用GBK读,还错误,那么就是文件错了。

编码的错报的ArgumentOutOfRangeException。我们可以Catch,用GBK就是上面写的。

全部代码


        private async Task<string> Read(StorageFile file)

        {

            string str = "";

            try

            {

                str = await Windows.Storage.FileIO.ReadTextAsync(file);

            }

            catch (ArgumentOutOfRangeException)

            {

                //using(var stream =new StreamReader((await file.OpenReadAsync()).GetInputStreamAt(0).AsStreamForRead()))

                //{

                //    string text = stream.ReadToEnd();

                //    return text;

                //}

                IBuffer buffer = await FileIO.ReadBufferAsync(file);

                DataReader reader = DataReader.FromBuffer(buffer);

                byte[] fileContent = new byte[reader.UnconsumedBufferLength];

                reader.ReadBytes(fileContent);

                string text = "";

               // Encoding.ASCII.GetString(fileContent, 0, fileContent.Length);

               //text= Encoding.GetEncoding(0).GetString(fileContent, 0, fileContent.Length);

                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

                Encoding gbk = Encoding.GetEncoding("GBK");

                text = gbk.GetString(fileContent);

                //string text = AutoEncoding(new byte[4] { fileContent[0], fileContent[1], fileContent[2], fileContent[3] }).GetString(fileContent);

                return text;

            }

            return str;

        }

        private static Encoding AutoEncoding(byte[] bom)

        {

            if (bom.Length != 4)

            {

                throw new ArgumentException();

            }

            // Analyze the BOM

            if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;

            if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;

            if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE

            if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE

            if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return Encoding.UTF32;

            return Encoding.ASCII;

        }

参考:http://stackoverflow.com/questions/35296213/read-unicode-string-from-text-file-in-uwp-app/38299563#38299563

http://www.cnblogs.com/loyieking/p/5617508.html

文本还有一个坑,我们如何在文本追加?uwp追加文本其实换了类,在FileIO。

对于一个需要追加的文件,UWP追加文件写入其实可以使用await FileIO.AppendTextAsync(StorageFile,"追加文本");


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

win10 uwp 读取文本GBK错误的更多相关文章

  1. win10 uwp 读取保存WriteableBitmap 、BitmapImage

    我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap.关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说.主要说的 ...

  2. Win10 UWP系列:关于错误 0x80073CF9及一个小bug的解决

    最近一直在开发XX的uwp版本,也是边摸索边做,最近遇到几个比较奇怪的问题,记录于此. 1.项目可用部署到PC,但无法部署到手机,提示以下错误: 错误 : DEP0001 : 意外错误: Instal ...

  3. win10 uwp 读取resw资源文件

    ResourceContext resourceContext = ResourceContext.GetForViewIndependentUse(); ResourceMap resourceMa ...

  4. 2019-8-24-win10-uwp-读取文本GBK错误

    title author date CreateTime categories win10 uwp 读取文本GBK错误 lindexi 2019-8-24 16:2:27 +0800 2018-2-1 ...

  5. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  6. win10 uwp 如何开始写 uwp 程序

    本文告诉大家如何创建一个 UWP 程序. 这是一系列的 uwp 入门博客,所以写的很简单 本文来告诉大家如何创建一个简单的程序 安装 VisualStudio 在开始写 UWP 需要安装 Visual ...

  7. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  8. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  9. 【Win10 UWP】QQ SDK(二):SDK的回调处理

    上一讲,我们介绍了QQ SDK的使用方法,请看<[Win10 UWP]QQ SDK(一):SDK基本使用方法> 一. 回调的基本形式 从前面的介绍中我们知道,我们的应用和QQ客户端之间需要 ...

随机推荐

  1. Java课程设计——GUI密码生成器团队博客

    1.团队名称.团队成员介绍(需要有照片) 1.1团队名称 小黄人 1.2团队成员介绍 吴玲:组长,现任院就业会策划部副部长 郭琪容:组员,现任院硬件协会会长 2. 项目git地址 吴 玲 郭琪容 3. ...

  2. MarkDown换行

    现象:1,MarkDown编辑两行显示,但是实际显示为一行: 2,编辑状态中空一行,此时显示为也空了一行,界面显示不友好: 解决:在第一行中最后输入至少2个空格+回车即可显示正常:

  3. Eclipse rap 富客户端开发总结(11) : rcp/rap与spring ibatis集成

    1. rcp/rap 与 spring 集成 Activator 是rcp/rap 启动时需要加载的类, 只需要加载一遍,所以与spring 集成的时候一般是在这个类里面加载spring 的Appli ...

  4. linux fork两次避免僵尸进程的程序(简单)

    #include<stdio.h> #include<unistd.h> int main() { pid_t pid,pid1; int status; ) { printf ...

  5. webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】

    实现接口的webservice 服务端 import javax.jws.WebService; /**面向接口的webservice发布方式 * * */ @WebService public in ...

  6. JS中this到底指哪个对象

    忘了原作者是谁了   自己也添加了一些东西  勉强可以观看一下 元素就不写了   可以自己添一下试试 先看这段代码 target.onclick = function(){ console.log(t ...

  7. 【个人笔记】《知了堂》mysql表连接

    为什么使用表连接 什么是表连接? 如果数据来自多个表,那么可以采用链接查询的方式来实现.因此表连接就是多个表连接合在一起实现查询效果 表连接的原理 表连接采用的是笛卡尔乘积,称之为横向连接. 笛卡尔乘 ...

  8. JSON和java对象的互转

    先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...

  9. EntityFramework Core饥饿加载忽略导航属性问题

    前言 .NET Core项目利用EntityFramework Core作为数据访问层一直在进行中,一直没有过多的去关注背后生成的SQL语句,然后老大捞出日志文件一看,恩,有问题了,所以本文产生了,也 ...

  10. iOS Storyboard约束详解

    链接:http://www.jianshu.com/p/b88c65ffc3eb 约束,就是指--此处略去1万字--都懂的,就不说了.直接进入实战环节. 本文的控件约束都是围绕着UITableView ...