如果获取编码信息?

问题描述

面试的时候,面试官问到这样一个问题:“在项目中,出现乱码的情况,你怎么获得该信息的原编码?”。(当时就哑了,不知道怎么回答,望大牛们教教)

解决方案

import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;public class FileEncodeReferee{ private File file; public FileEncodeReferee(File file) { this.file = file; } public FileEncodeReferee(String path) { file = new File(path); } public String getCharset() { File file = this.file; String charset = "GBK"; byte[] first3Bytes = new byte[3]; BufferedInputStream bis = null; try { //boolean checked = false; bis = new BufferedInputStream(new FileInputStream(file)); bis.mark(0); int read = bis.read(first3Bytes, 0, 3); if (read == -1) { return charset; } if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) { charset = "UTF-16LE"; //checked = true; } else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) { charset = "UTF-16BE"; //checked = true; } else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB && first3Bytes[2] == (byte) 0xBF) { charset = "UTF-8"; //checked = true; } /** *//******************************************************************* * bis.reset(); if (!checked) { int loc = 0; while ((read = * bis.read()) != -1) { loc++; if (read >= 0xF0) { break; } if (0x80 <= * read && read <= 0xBF) // 单独出现BF以下的,也算是GBK { break; } if (0xC0 <= * read && read <= 0xDF) { read = bis.read(); if (0x80 <= read && * read <= 0xBF)// 双字节 (0xC0 - 0xDF) { // (0x80 - 0xBF),也可能在GB编码内 * continue; } else { break; } } else if (0xE0 <= read && read <= * 0xEF) { // 也有可能出错,但是几率较小 read = bis.read(); if (0x80 <= read && * read <= 0xBF) { read = bis.read(); if (0x80 <= read && read <= * 0xBF) { charset = "UTF-8"; break; } else { break; } } else { * break; } } } System.out.println(loc + " " + * Integer.toHexString(read)); } ******************************************************************/ } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (Exception ex) { ex.printStackTrace(); } } } return charset; } public static void main(String[] args) { FileEncodeReferee fer = new FileEncodeReferee("E://Huha.csv"); System.out.println(fer.getCharset()); }}
解决方案二:
真不会的时候可以直接反过去请教下呗..貌似获文件编码好像是比较困难, 可以用Uedit32打开文件,看匹配的编码是哪一个,再者就的使用第三方提供的jar 读取文件分析了.
解决方案三:
你问问是乱码情况时的编码 还是出现乱码前一版本的编码呗.

时间: 2024-09-14 23:38:39

如果获取编码信息?的相关文章

php获取浏览器信息、访客语言、访客操作系统、访客IP地址及访客地理位置

php获取浏览器信息.获取访客语言.获取访客操作系统.获取访客IP地址.获取访客地理位置. php获取浏览器信息,获取访客语言:简体中文.繁體中文.English.获取访客操作系统:Windows.MAC.Linux.Unix.BSD.Other.获取访客IP地址.获取访客地理位置,使用 新浪腾讯接口. <?php /** * 获取访客信息的类:语言.浏览器.操作系统.IP.地理位置.ISP. * 使用: * $obj = new guest_info; * $obj->GetLang();

php-GridView显示PHP从数据库中查询获取的信息,英文显示正常,中文显示&amp;amp;quot;??“

问题描述 GridView显示PHP从数据库中查询获取的信息,英文显示正常,中文显示"??" public function query($query) { $result = mysql_query($query, $this->link)or die("失败"); $this->result = $result; if ($result == false) trigger_error('Uncovered an error in your SQL q

Android——使用Volley+fastJson在新线程中读取网络接口获取天气信息

一,关于Volley            其实最初对于网络数据的访问,我是没想到要用框架的,使用HttpURLConnection或者HttpGet or HttpPost都可以实现.但是why? why I have to use Volley?        Before Volley:                class HttpURLConnection_post extends Thread{ @Override public void run() { //设置请求的路径 St

android-WIFI扫描获取相关信息

问题描述 WIFI扫描获取相关信息 编写应用,扫描wifi,获取每一个wifi连接的信息. 需要获取每个ssid的以下信息: 1 支持的最大物理层速率 2 无线服务的类型(infrastructure 还是ad-hoc) 3 最早发现时间,最后发现时间 4 同时如何做到支持5.8G和2.4G全频段的信号强度扫描,在android上怎么编码设置和实现. 开发文档里面的scanResult 类似乎没有给出更多的信息.希望高手指点迷津. demo或者指引方向都是可以的.先谢谢各位. 解决方案 SqlC

重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化

原文:重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化 [源码下载] 重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通信 获取网络信息 序列化 - json 序列化 - xml 序列化 - rss atom 示例1.演示如何获取网络的相关信息Communication/NetworkInfo.xa

JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用

[正文] 一.ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多) String getServletName()  -- 获取当前Servlet在web.xml中配置的名字 String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值 Enumeration getInitParameterNames()  -- 获取当前Servlet所有初始化参数的名字组成的枚举 ServletConte

完整删除ecshop中获取店铺信息的API_php实例

使用的版本是ECShop_V2.7.3_UTF8_release1106,按以下步骤可完整去除其中获取店铺信息的API接口. 一. 删除获取店铺信息的API 1. admin/index.php 搜索 "elseif ($_REQUEST['act'] == 'main_api')" ,删除,源文件 489 - 539 行. 此段功能是官方获取ecshop版本.语种.发布时间.PHP版本.数据库版本.编码.订单数量.商品数量.用户数量以及店铺主题.样式名称.店铺URL.补丁信息的api

PHP版微信第三方实现一键登录及获取用户信息的方法_php技巧

本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要"服务号"才可以哦,所以必须到官方申请. 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名 前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可以

html文件利用ajax方法 通过 servlet 获取数据库信息 显示乱码,求解?

问题描述 html文件利用ajax方法 通过 servlet 获取数据库信息 显示乱码,求解?suggest.html:<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><script language="JavaScript" type="text/javascript" sr