java字符集编码的自动识别(字符需要编码机器才能识别)

本文目录一览:

JAVA 在抓取网页 怎么自动识别它的网页编码

JAVA 在抓取网页 怎么自动识别它的网页编码

1. 看HttpHeader里面是否有一定的encoding; 或者看HTML页面页面的encoding

meta http-equiv=”Content-Language” content=”zh-CN” /

meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /

2. 如果没抛异常, socket就认为只是一直等待, 不知道是否可以设置超时时间, socket肯定是可以的

java中编码与解码分别指什么?

java中编码:URLEncoder.encode(strUri,”utf-8″);

java中解码码:URLDecoder.decode(strUri,”utf-8″);

java编码和解码        

流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,

构造器有如:

InputStreamReader(InputStream in, String charsetName)

创建使用指定字符集的 InputStreamReader。

OutputStreamWriter(OutputStream out, String charsetName)

创建使用指定字符集的 OutputStreamWriter。

处理字符串编码问题:

重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);

重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);

一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);

例如:resultName=new String(username.getBytes(“ISO-8859-1″),”UTF-8”);

还可以加入判断:

if(!Charset.forName(“gbk”).newEncoder().canEncode(str)){str = new Strin(str.getBytes(“ISO-8859-1″),”UTF-8”);}else{str = new String(str.getBytes(“ISO-8859-1″),”gbk”);}

处理请求参数传递编码问题:

java中编码:URLEncoder.encode(strUri,”utf-8″);

java中解码码:URLDecoder.decode(strUri,”utf-8″);

js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);

js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);

补充概念:

URI组件:主机、端口、路径、查询参数、片段等。

URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,用于分隔多个查询参数等。

URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ = + $ , / ? # [ ] 他们具有特殊作用,例如上面的分隔作用。

URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。

js向java/jsp的编码与解码:

js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));

java/jsp中解码: java.net.URLDecoder.decode(strUri,”UTF-8″);

js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。

然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。

几种判断字符集编码的方法(Java) 未完

如果是Java的String对象的话,则一定是Unicode的,这个没有为什么,Java就是这么定的。

我猜你的问题应该是如何判断一段字节流是什么编码类型,对吗?比如一个文件,或是网络上面取下来的一段Byte数组,你需要用一个合适的编码来解析成字符串。

这个让你失望了,没有一个文档化的,确定的方法来判断,只能用测试的方法,这个方法也只是猜测,不能百分百的确定,方法如下:

用常见的编码方式对字节流进行解码,比如Unicode,UTF8, UTF8 without BOM, UTF16, ANSI等等。

对解析的结果进行判断,是不是一个合理的可打印字符,可打印字符最多的解码方式就是最可能的编码了。

如何判断可打印字符?流程如下:把解析好的字符串按照字符进行遍历,把每一个字符转化成Unicode编码,看看这些编码是不是Unicode的支持范围极客。

如果发现有种编码方式都是可打印字符,那么再使用本步骤:对字符串进行分词,分词这个在此不作赘述,你自己再研究一下。分词效果好的就是最可能的编码了。(不过通常到第三步就能搞定了,第四部绝大部分用不着)

Java: 如何知道一个字符串当前是什么字符集?

判断java字符串的字符集有多种方法,我们一一讨论如下:

1、通过把未知编码字符串,用猜想的编码再解码,观察字符串是不是正确还原了。

原理:假如目标编码没有数组中的字符,那么编码会破坏,无法还原。

缺点:假如字符少,而正巧错误的猜想编码中有这种字节,就会出错。

如:new String(“tested str”.getBytes(“enc”),”enc”)

2、大多数时候,我们只要判断本地平台编码和utf8,utf8编码相当有规律,所以可以分析是否是utf8,否则使用本地编码。

原理:分析byte[]来判断规律。

缺点:有时,个别本地编码字节在utf8中也会出现,导致出错,需要分析。

如:判断是否utf-8代码:

public static boolean isValidUtf8(byte[] b,int aMaxCount){

int lLen=b.length,lCharCount=0;

for(int i=0;i

byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)

if(lByte=0) continue;//=0 is normal ascii

if(lByte(byte)0xc0 || lByte(byte)0xfd) return false;

int lCount=lByte(byte)0xfc?5:lByte(byte)0xf8?4

:lByte(byte)0xf0?3:lByte(byte)0xe0?2:1;

if(i+lCountlLen) return false;

for(int j=0;j=(byte)0xc0) return false;

}

return true;

}

3.按编码规则,一字字比照。

优点是错物更少,缺点是太费资源。

原创文章,作者:JBPR,如若转载,请注明出处:https://www.506064.com/n/146991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JBPRJBPR
上一篇 2024-10-31 15:33
下一篇 2024-10-31 15:34

相关推荐

  • 英语年龄用连字符号(Hyphenation for English Age)

    英语年龄通常使用连字符号表示,比如 “five-year-old boy”。本文将从多个方面探讨英语年龄的连字符使用问题。 一、英语年龄的表达方式 英语中表…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29
  • Python计算中文字符个数

    本文将从多个方面对Python计算中文字符个数进行详细的阐述,包括字符串长度计算、正则表达式统计和模块使用方法等内容。 一、字符串长度计算 在Python中,计算字符串长度是非常容…

    编程 2025-04-29
  • Python中如何判断字符为数字

    判断字符是否为数字是Python编程中常见的需求,本文将从多个方面详细阐述如何使用Python进行字符判断。 一、isdigit()函数判断字符是否为数字 Python中可以使用i…

    编程 2025-04-29
  • Python中逗号算字符吗

    Python中逗号既可以作为分隔符,也可以作为一个表达式中的运算符。关于逗号作为分隔符是不会被算作字符的事情,这点大家都知道。本文主要就是阐述逗号作为运算符在表达式中是会被算作字符…

    编程 2025-04-28
  • 使用boofcv进行图像处理和机器视觉

    本文将详细介绍使用boofcv进行图像处理和机器视觉的方法和实践。首先,我们将介绍boofcv的概述和安装方法,然后分别介绍它的图像处理、相机校准和机器学习功能。 一、概述和安装 …

    编程 2025-04-28
  • 从16进制转义到中文字符

    16进制转义是为了在不同的字符集、不同的编码下,能够保证特殊字符被正确的识别和渲染。本文将从多个方面对16进制转义做详细的阐述,让读者对其有更深入的了解。 一、转义实现 在Web开…

    编程 2025-04-28
  • python字符转换成字节的方法

    Python是一种很流行的编程语言,它支持多种数据类型的操作和转换。在实际应用中,我们经常需要把字符转换成字节来进行网络传输或者文件读取等操作。Python提供了很多方法可以完成这…

    编程 2025-04-28
  • 如何使用字符常量输出hello

    在本篇文章中,我们将从以下几个方面详细讨论如何使用字符常量输出hello。通过简单的代码示例,希望能够帮助您更好地理解和掌握。 一、输出字符常量 首先,我们需要了解在编程中如何使用…

    编程 2025-04-27

发表回复

登录后才能评论