导航:首页 > 操作系统 > androidutf转unicode

androidutf转unicode

发布时间:2022-11-29 12:36:43

Ⅰ 怎么解决读取txt文件读取时中文乱码问题

从SDCard保存的txt文件读取中文到android系统中会出现乱码问题,如何解决这个乱码问题,网上有不少解答方法,譬如说利用String temp1 =EncodingUtils.getString(strLine.getBytes(),"GB2312"); 但并非对所有的情况都适用,解决乱码问题首先要明白为什么会乱码。究其原因,是因为txt文件在win系统上保存时默认为ANSI格式,而android目前只支持UTF-8编码,因此将txt文件的中文读入android系统中会产生乱码。也有人说直接将txt另存为UTF-8编码格式来解决乱码问题,但这种方法指标不治本,不能要求用户手动去更改格式,客户第一嘛。因此还是需要想办法在程序中进行处理。
以下做了一些编码格式的测试:
测试文本: 122.11196,29.90573,北仑固废厂 测试代码段:
reader=new BufferedReader(new FileReader(filename));
strLine=reader.readLine() ;
String temp1 = EncodingUtils.getString(strLine.getBytes(),"GB2312");
String temp2 = EncodingUtils.getString(strLine.getBytes("utf-8"),"utf-8");
String temp3 = EncodingUtils.getString(strLine.getBytes(),"utf-8");
将文件存成 Unicode 格式
这种方式能得到非乱码的中文显示,但对于 utf-8 格式下取得的经纬度数字利用double lon = Double.parseDouble(lat); 报错 NumberFormatException,原因可能是 parseDouble(lat)方法不能处理存成utf-8格式的带标点小数。 将文件 存成 ANSI 格式
将代码改为:

reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename),"GB2312"));

strLine=reader.readLine() ;
String temp1 = EncodingUtils.getString(strLine.getBytes(),"GB2312");
String temp2 = EncodingUtils.getString(strLine.getBytes("utf-8"),"utf-8");
String temp3 = EncodingUtils.getString(strLine.getBytes(),"utf-8");
即解决了中文乱码问题,又解决了Double.parseDouble(lat)报错问题。

Ⅱ 易语言好用还是python语言好用

当然是python好用了,不论是易还是python都不可以编写手机软件python对中文支持不好,这个不好办,不过网上很多相关解决方法的。=====================================================本文原创,如需转载,请注明出处。在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854; 2. UTF-8,E59388; 3. GBK,B9FE。一、python中的str和unicode
一直以来,python中的中文编码就是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?在python中提到unicode,一般指的是unicode对象,例如'哈哈'的unicode对象为u'\u54c8\u54c8'而str,是一个字节数组,这个字节数组表示的是对unicode对象编码(可以是utf-8、gbk、cp936、GB2312)后的存储的格式。这里它仅仅是一个字节流,没有其它的含义,如果你想使这个字节流显示的内容有意义,就必须用正确的编码格式,解码显示。例如: 对于unicode对象哈哈进行编码,编码成一个utf-8编码的str-s_utf8,s_utf8就是是一个字节数组,存放的就是'\xe5\x93\x88\xe5\x93\x88',但是这仅仅是一个字节数组,如果你想将它通过print语句输出成哈哈,那你就失望了,为什么呢?因为print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输入的字节流进行编码,这就解释了为什么utf-8格式的字符串“哈哈”,输出的是“鍝埚搱”,因为'\xe5\x93\x88\xe5\x93\x88'用GB2312去解释,其显示的出来就是“鍝埚搱”。这里再强调一下,str记录的是字节数组,只是某种编码的存储格式,至于输出到文件或是打印出来是什么格式,完全取决于其解码的编码将它解码成什么样子。这里再对print进行一点补充说明:当将一个unicode对象传给print时,在内部会将该unicode对象进行一次转换,转换成本地的默认编码(这仅是个人猜测)二、str和unicode对象的转换
str和unicode对象的转换,通过encode和decode实现,具体使用如下: 将GBK'哈哈'转换成unicode,然后再转换成UTF8三、Setdefaultencoding
如上图的演示代码所示:当把s(gbk字符串)直接编码成utf-8的时候,将抛出异常,但是通过调用如下代码:import sysreload(sys)sys.setdefaultencoding('gbk')后就可以转换成功,为什么呢?在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用的编码为默认编码,一般默认编码是anscii,所以在上面示例代码中第一次转换的时候会出错,当设定当前默认编码为'gbk'后,就不会出错了。至于reload(sys)是因为Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入。四、操作不同文件的编码格式的文件
建立一个文件test.txt,文件格式用ANSI,内容为:abc中文用python来读取# coding=gbkprint open("Test.txt").read()结果:abc中文把文件格式改成UTF-8:结果:abc涓�枃显然,这里需要解码:# coding=gbkimport codecsprint open("Test.txt").read().decode("utf-8")结果:abc中文上面的test.txt我是用Editplus来编辑的,但当我用Windows自带的记事本编辑并存成UTF-8格式时,运行时报错:Traceback (most recent call last):File "ChineseTest.py", line 3, in print open("Test.txt").read().decode("utf-8")UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 0: illegal multibyte sequence原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。因此我们在读取时需要自己去掉这些字符,python中的codecs mole定义了这个常量:# coding=gbkimport codecsdata = open("Test.txt").read()if data[:3] == codecs.BOM_UTF8:data = data[3:]print data.decode("utf-8")结果:abc中文五、文件的编码格式和编码声明的作用源文件的编码格式对字符串的声明有什么作用呢?这个问题困扰一直困扰了我好久,现在终于有点眉目了,文件的编码格式决定了在该源文件中声明的字符串的编码格式,例如:str = '哈哈'print repr(str)a.如果文件格式为utf-8,则str的值为:'\xe5\x93\x88\xe5\x93\x88'(哈哈的utf-8编码)b.如果文件格式为gbk,则str的值为:'\xb9\xfe\xb9\xfe'(哈哈的gbk编码)在第一节已经说过,python中的字符串,只是一个字节数组,所以当把a情况的str输出到gbk编码的控制台时,就将显示为乱码:鍝埚搱;而当把b情况下的str输出utf-8编码的控制台时,也将显示乱码的问题,是什么也没有,也许'\xb9\xfe\xb9\xfe'用utf-8解码显示,就是空白吧。>_<说完文件格式,现在来谈谈编码声明的作用吧,每个文件在最上面的地方,都会用# coding=gbk 类似的语句声明一下编码,但是这个声明到底有什么用呢?到止前为止,我觉得它的作用也就是三个:
1.声明源文件中将出现非ascii编码,通常也就是中文;
2.在高级的IDE中,IDE会将你的文件格式保存成你指定编码格式。
3.决定源码中类似于u'哈'这类声明的将‘哈’解码成unicode所用的编码格式,也是一个比较容易让人迷惑的地方,看示例:
#coding:gbk
ss = u'哈哈'print repr(ss)print 'ss:%s' % ss将这个些代码保存成一个utf-8文本,运行,你认为会输出什么呢?大家第一感觉肯定输出的肯定是:u'\u54c8\u54c8'ss:哈哈但是实际上输出是:u'\u935d\u581d\u6431'ss:鍝埚搱为什么会这样,这时候,就是编码声明在作怪了,在运行ss = u'哈哈'的时候,整个过程可以分为以下几步:1) 获取'哈哈'的编码:由文件编码格式确定,为'\xe5\x93\x88\xe5\x93\x88'(哈哈的utf-8编码形式)2) 转成unicode编码的时候,在这个转换的过程中,对于'\xe5\x93\x88\xe5\x93\x88'的解码,不是用utf-8解码,而是用声明编码处指定的编码GBK,将'\xe5\x93\x88\xe5\x93\x88'按GBK解码,得到就是''鍝埚搱'',这三个字的unicode编码就是u'\u935d\u581d\u6431',至止可以解释为什么print repr(ss)输出的是u'\u935d\u581d\u6431'了。好了,这里有点绕,我们来分析下一个示例:#-*- coding:utf-8 -*-ss = u'哈哈'print repr(ss)print 'ss:%s' % ss将这个示例这次保存成GBK编码形式,运行结果,竟然是:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: unexpected code byte这里为什么会有utf8解码错误呢?想想上个示例也明白了,转换第一步,因为文件编码是GBK,得到的是'哈哈'编码是GBK的编码'\xb9\xfe\xb9\xfe',当进行第二步,转换成unicode的时候,会用UTF8对'\xb9\xfe\xb9\xfe'进行解码,而大家查utf-8的编码表会发现,utf8编码表(关于UTF-8解释可参见字符编码笔记:ASCII、UTF-8、UNICODE)中根本不存在,所以会报上述错误。 本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/kiki113/archive/2009/04/10/4062063.aspx

Ⅲ Android里面JNI使用的MUTF-8编码,为什么要使用MUTF-8而不使用UTF-8

这是因为java内部使用UTF-16编码,
一般情况下,一个char就能代表u+0000~u+ffff的unicode. utf-8,mutf-8编码是一样的。
而对于u+10000 u+10ffff的字符的编码是采用一对代理字符的方式来编码的,即两个char代表一个字符。其中一个char为0xD800 ~ 0xDBFF 含高位10bits,另一个为0xDC00 ~ 0xDFFF含低位10bits.(在这之前这个编码要先被减去0x10000,这样它的值的范围就落到0x0~0xfffff,正好最多20bits) 也就是说只要检查一个字符的值的范围,就知道这字符是否应该和下一个字符组成对。
回过头来,utf-8 对u+0000 ~ u+ffff编码结果是1~3字节,对u+1000 ~ u+10ffff编码会4字节及以上。
如果采用utf-8,会使jvm处理这种字节时,进行两次编码。第一次是utf-8 -> unicode (32 位),第二次 unicode (32 位) -> utf-16 (16 位)。
而采用mutf-8时,它只认字节,不认字节对。它直接操作java 语义上的char。u+10000 ~ u+10ffff是被当成两个char来处理的。每都分别被编码成utf-8 的三个字节。这相当于直接utf-8 -> utf-16,省了一步操作。可以说是必然的结果。

Ⅳ 如何解决Android WebView出现的乱码问题

1、webView.loadUrl();
直接显示网页内容(单独显示网络图片),一般不会出现乱码。
2、webView.loadData(data, "text/html", "UTF-8");
loadData主要被设计用来装载URI格式的数据,它不能通过网络来加载内容。网上流传的webview加载中文出现乱码,多数是使用此方法。使用过程中主要有两个问题:
(1)loadData不能加载图片内容,如果想加载图片内容或者获得更强大的Web支持建议使用更强大的loadDataWithBaseURL.
(2) 许多实用loadData方法的朋友都遇到显示乱码的问题,那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式。举例如下:
WebView wv = (WebView)findViewById(R.id.webview) ;
wv.getSettings().setDefaultTextEncodingName(“UTF -8”) ;
wv.loadData(content, “text/html”, “UTF-8”) ;
注意为gb2312或gbk
(3).网页说明编码格式
以上两种方法是网上给的比较好的方法,但是我都试了下都没有解决我的乱码问题。 原来我是用LoadData方法来解析html的,但是据说这是官方的一个BUG,不能用来解析中文。所以绕其道而行之,采用loadDataWithBaseURL的方法,其中codeingType设置为utf-8就OK了。3、loadDataWithBaseURL如果单纯显示文字的话可以写webView.loadDataWithBaseURL(null, string, "text/html", "utf-8", null);
如果要显示图片可以写webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
其中baseUrl为你存储照片的路径,比如:

Ⅳ android studio 怎么打开文件有些乱码,有些不乱吗

乱码是因为编码不匹配的问题,你的文件中应该含有中文,并且你的文件编码方式不统一,或者使用了不同的编码方式打开相同编码的文件。推荐使用utf8,这是所有Android、Ios、Linux默认的编码方式,Windows是GBK编码,utf8属于Unicode编码方式中的一种,Unicode是全世界都通用的,ANSI指的是本土化编码对于中国来说就是ANSI就是GBK。Android Studio编辑文件时右下角有个本文件的编码方式,一旦出现乱码你就不要修改文件内容了,如果修改文件内容再保存,就很难恢复乱码了,要在没有编辑文件前选择一种合适的编码方式,看什么编码方式文件才不会出现乱码就选择什么编码方式,如果想要修改编码方式可以直接赋值粘贴到不同编码的文件内。Sublime Text和Notepad++都很好的支持各种编码方式并且能够轻易转化,其中Sublime Text会自动匹配对应的编码方式。

Ⅵ android怎么根据文件编码读取文件

使用记事本"另存为",可以看到有编码类型选项:

编码类型有: ANSI, Unicode, UTF-8几种,它们的区别在于前面的BOM码(Bytes Of Mark):
Unicode的txt前两个字节是ff fe;
Unicode big endian的txt前两个字节是fe ff;
UTF-8的txt前三个字节是ef bb bf,也可以没有,即没有BOM.
ANSI的txt是直接开始内容的。

Ⅶ Android中Java 默认UTF-8,中文乱码

OutputStreamWriter(OutputStream out)
Creates an OutputStreamWriter that uses the default character
encoding.

OutputStreamWriter(OutputStream out, Charset cs)
Creates an OutputStreamWriter that uses the given
charset.

OutputStreamWriter(OutputStream out, CharsetEncoder enc)
Creates an OutputStreamWriter that uses the given charset
encoder.

OutputStreamWriter(OutputStream out, String charsetName)
Creates an OutputStreamWriter that uses the named
charset.
参考一下吧

Ⅷ 在android中怎样把utf-16的字符转换为GBK字符用printf输出

在java里面应该是先转换成newString(s,"utf-16").getBytes("gbk");这样操作的。

不知道字节的顺序C和Java是一样的不。原来的 JDK 中也是用char 来代表字符的,我们知道当我们想处理所有字符时1个字节 (char) 根本不够,所以 JDK 5 还是用回 int 来表示 code point在逻辑上一个 int 表示一个字符,而原来的 char 只能表示字节。那么你的 7 字节的 unsigned int 是相当于 Java 中的什么呢?每个 unsigned int 怎么对应到 java 的 char[] 数组上来的?


在 Java 中内核是使用 Unicode 处理的,不存在什么 GBK 输出,我们已经看到字符时它就在 JVM 处理时有一个 unicode code point 了,你的 GBK 输出是指要转换成 GBK 字节导出另一个系统?保存到磁盘也可以算做交换数据,不过如果只是缓存只被自己使用的话,随便用什么字符集保存下次再用同样字符集读取就可以了,哪怕保存到磁盘上是错误的也没关系,只要还原过程是无损失的就可以了。那么如果你的 printf 打印把控制台(还在内存中,不去磁盘,也不去网络另一端)就不需要考虑 byte[] 了,直接当成 Reader / Writer 这类来处理就可以了。


始终了解一点,当你不打算”交换数据“时,字符集是根本没有任何用处的。


字节或字符本身并没有UTF-16和GBK的差别,主要是当我们想把它转换成字节时而有不同。每个字符按理说在操作系统或编程语言中会有一个unicodecodepoint与它对应(这样的系统内核使用unicode就不存在处理不了的语言了)。因此,转换的过程就是先让对应到unicodecodepoint再转换到另一个字符集编码对应的byte[]就行了。


什么是 unicode,看下这个图片,那么什么是 UTF-8,从图片中看到了 code point 是十六进制 0x20073 = 131187,那么当多个字符挨在一起我们想通过网络传送出去,如何让对方程序知道字符的边界在哪里,哪几个字节凑在一起是一个字符,这就是字符集编码方案了。UTF-8 只是其中一种编码方案。

Ⅸ 如何将编码为UTF-16LE的文本在文本编码为UTF-8的安卓手机正常显示出来

如果只是转换ascill字符,转换到utf8是一样的.如果转换到utf16即unicode,这个是宽字节编码,asicll和中文即gb编码,算多字节编码,即需要直接调用vs的api函数MultiByteToWideChar,多字节转宽字节函数来实现

Ⅹ Android 使用Log打印日志的时候中文是乱码,怎么解决啊

是由于DOS窗口显示的编码同logcat日志中不同导致的乱码问题。DOS窗口默认的编码是GBK,而LogCat打印的是UTF-8的编码,所以要设置DOS字符编码:
1, 在当前命令行下输入 chcp 65001,按回车键。这时,当前代码页使用的就是UTF-8编码了。
2, 修改窗口属性,改变字体。在命令行标题栏上点击右键,选择“属性”->“字体””,将字体修改为True Type字体”Lucida Console”,然后点击确定将属性应用到当前窗口。
3,再使用logcat打印日志,就可以正常显示中文字符了。
4, 补充部分字符编码对应代码:
65001——UTF-8
936——简体中文
950——繁体中文
437——美国/加拿大英语
932——日文
949——韩文
866——俄文

阅读全文

与androidutf转unicode相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163