PHP怎么判断txt文件的编码

网站的a目录下有许多txt文件,现在我要判断这些文件的编码,如果不是ANSI编码就进行编码转换。注意,是判断txt文档的编码,不是文字编码哦!txt文档编码类型:ANSI... 网站的a目录下有许多txt文件,现在我要判断这些文件的编码,如果不是ANSI编码就进行编码转换。注意,是判断txt文档的编码,不是文字编码哦!txt文档编码类型:ANSI、Unicode、Unicode big endian、UTF-8

但是,怎么判断txt文档编码呢?
展开
 我来答
暗号无痕
2012-05-18 · TA获得超过109个赞
知道答主
回答量:81
采纳率:0%
帮助的人:72.3万
展开全部
我做了几年PHP程序员,据我所知,PHP是没法判断文档编码的。如果PHP能判断文档编码就不会有网站会出现乱码了,判断文档编码一般浏览器来处理。

我们公司开发的采集程序,就是通过网站源代码中的UTF-8 gbk 等字样来判断。

处理你说的这个问题,要开发桌面程序来处理才行。
追问
那有其他方法能做到吗?或者说asp.net之类的语言,或者专业文本处理软件之类的?
追答
我给你写的PHP代码,判断编码原理就是靠猜的。我已经测试过了可以正常转换,可以将ansi文档转换成utf-8。

不过一定要注意:php文件要保存utf-8编码。

Du错错错

推荐于2016-04-15 · 知道行家,感谢您的关注。
Du错错错
采纳数:871 获赞数:7278

向TA提问 私信TA
展开全部
文件a.txt,用PHP如何判断它的编码是GBK还是UTF-8呢?
1,重新认识一下此问题,当时版主回复的时候我就觉得mb函数里一定有这样的功能,但今日研究了mb库,并没有这样的功能。用mb_detect_encoding总是不准确。
echo mb_detect_encoding(file_get_contents('a.txt'));
2,在PHP的在线文档中找了一个方法,可以解决问题,需要自己编写一个函数来实现。
具体代码如下:
function isUTF8($str)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32"))
{
return true;
}
else
{
return false;
}
}
$content = file_get_contents("a.txt");
echo isUTF8($content);
3,经测试,在编码种类不多的情况下,2方法成功率还是挺高的。
function ChickC($str)
{
$array = array('ASCII','GBK','UTF-8');
foreach ($array as $value)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", $value), $value, "UTF-32"))
return $value;
}
return false;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
易点互联
2012-05-18 · 知道合伙人IT服务行家
易点互联
知道合伙人IT服务行家
采纳数:79 获赞数:283
易点互联创始人,易点互联专注于提供软件开发服务

向TA提问 私信TA
展开全部
一个文本除非明确告诉你使用的编码,要不然你是无法准确得到其编码的,只能靠猜,PHP的mb_string中有一些检测函数。

所以说web上的许多东西都需要指明编码
追问
那有没有其它软件之类的,可以一次判断某个目录下的txt编码,并且根据编码排列出来?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
windblast
2012-05-18 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13617
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部
<?php

define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));

function get_encode($filename)
{

$text = file_get_contents($filename);
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);

if ($first3 == UTF8_BOM)
return 'UTF-8 BOM';
elseif ($first4 == UTF32_BIG_ENDIAN_BOM)
return 'UTF-32BE';
elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM)
return 'UTF-32LE';
elseif ($first2 == UTF16_BIG_ENDIAN_BOM)
return 'UTF-16BE';
elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM)
return 'UTF-16LE';

if ($text === iconv('UTF-8', 'UTF-8', iconv('UTF-8', 'UTF-8', $text)))
return 'UTF-8';
if ($text === iconv('UTF-8', 'ASCII', iconv('ASCII', 'UTF-8', $text)))
return 'ASCII';
if ($text === iconv('UTF-8', 'GB2312', iconv('GB2312', 'UTF-8', $text)))
return 'GB2312';

return '无法识别';
}

$file = 'test.txt';
echo get_encode($file);

?>
追问
测试过了,大部分txt文档都无法识别编码,可能是php语言本身缺陷,或者正如楼下所说的,除非明确告知,否则无法知晓文本编码。

不过还是很感谢你,毕竟有很多还是能够判断出来的!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式