PHP怎么判断txt文件的编码
网站的a目录下有许多txt文件,现在我要判断这些文件的编码,如果不是ANSI编码就进行编码转换。注意,是判断txt文档的编码,不是文字编码哦!txt文档编码类型:ANSI...
网站的a目录下有许多txt文件,现在我要判断这些文件的编码,如果不是ANSI编码就进行编码转换。注意,是判断txt文档的编码,不是文字编码哦!txt文档编码类型:ANSI、Unicode、Unicode big endian、UTF-8
但是,怎么判断txt文档编码呢? 展开
但是,怎么判断txt文档编码呢? 展开
4个回答
展开全部
我做了几年PHP程序员,据我所知,PHP是没法判断文档编码的。如果PHP能判断文档编码就不会有网站会出现乱码了,判断文档编码一般浏览器来处理。
我们公司开发的采集程序,就是通过网站源代码中的UTF-8 gbk 等字样来判断。
处理你说的这个问题,要开发桌面程序来处理才行。
我们公司开发的采集程序,就是通过网站源代码中的UTF-8 gbk 等字样来判断。
处理你说的这个问题,要开发桌面程序来处理才行。
追问
那有其他方法能做到吗?或者说asp.net之类的语言,或者专业文本处理软件之类的?
追答
我给你写的PHP代码,判断编码原理就是靠猜的。我已经测试过了可以正常转换,可以将ansi文档转换成utf-8。
不过一定要注意:php文件要保存utf-8编码。
展开全部
文件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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个文本除非明确告诉你使用的编码,要不然你是无法准确得到其编码的,只能靠猜,PHP的mb_string中有一些检测函数。
所以说web上的许多东西都需要指明编码
所以说web上的许多东西都需要指明编码
追问
那有没有其它软件之类的,可以一次判断某个目录下的txt编码,并且根据编码排列出来?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-05-18 · 知道合伙人软件行家
关注
展开全部
<?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);
?>
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语言本身缺陷,或者正如楼下所说的,除非明确告知,否则无法知晓文本编码。
不过还是很感谢你,毕竟有很多还是能够判断出来的!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询