php汉字utf8编码转换,php汉字转码 GBK->Unicode(UTF8)编码转换

这是一个PHP类,用于将GBK编码的汉字转换为Unicode(UTF8)编码。该类包含多个方法,如htmlHex、htmlDec、escape和u2utf8,分别用于以不同方式表示转换后的Unicode编码。
摘要由CSDN通过智能技术生成

//php汉字转码 GBK->Unicode(UTF8)

class qswhGBK{

var $qswhData;

function qswhGBK($filename=”qswhGBK.php”){

$this->qswhData=file($filename);

}

function gb2u($gb,$callback=””){

/******(qiushuiwuhen 2002-8-15)******/

$ret=””;

for($i=0;$i

if(($p=ord(substr($gb,$i,1)))>127){

$q=ord(substr($gb,++$i,1));

$q=($q-($q>128?65:64))*4;

$q=substr($this->qswhData[$p-128],$q,4);

}

else

$q=dechex($p);

if(empty($callback))

$ret.=$q;

else {

$arr=array(“htmlHex”,”htmlDec”,”escape”,”u2utf8″);

if(is_integer($callback)){

if($callback>count($arr))die(“Invalid Function”);

$ret.=$this->$arr[$callback-1]($q);

}else

$ret.=$callback($q);

}

}

return $ret;

}

function htmlHex($str){

return “”.$str.”;”;

} // 程序员之家 bbs.it-home.org

function htmlDec($str){

return “”.hexdec($str).”;”;

}

function escape($str){

return hexdec($str)<256?chr(hexdec($str)):"%u".$str;

}

function u2utf8($str){

/******(qiushuiwuhen 2002-8-15)******/

$sp=”!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~”;

$dec=hexdec($str);

$bin=decbin($dec);

$len=strlen($bin);

$arr=array(“c0″,”e0″,”f0”);

if($dec>0x7f){

$ret=””;

for($i=$len,$j=-1;$i>=0;$i-=6,$j++){

if($i>6)

$ret=”%”.dechex(0x80+bindec(substr($bin,$i-6,6))).$ret;

else

$ret=”%”.dechex(hexdec($arr[$j])+bindec(substr($bin,0,6-$i))).$ret;

}

}else{

if(strpos($sp,chr($dec)))

$ret=chr($dec);

else

$ret=”%”.strtolower($str);

}

return $ret;

}

}

256?chr(hexdec($str)):"%u".$str;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java 中,可以使用 `java.nio.charset.Charset` 类来实现 UnicodeGBK转码。 首先,需要使用 `Charset.forName()` 方法来获取 GBK 编码的 `Charset` 对象: ``` Charset gbkCharset = Charset.forName("GBK"); ``` 然后,使用这个 `Charset` 对象来创建一个 `CharsetEncoder` 对象,用于将 Unicode 编码的字符串转换GBK 编码: ``` CharsetEncoder encoder = gbkCharset.newEncoder(); ``` 最后,使用 `encode()` 方法将 Unicode 编码的字符串转换GBK 编码: ``` String unicodeString = "Hello, 世界"; ByteBuffer byteBuffer = encoder.encode(CharBuffer.wrap(unicodeString)); ``` 这样,就可以得到一个包含 GBK 编码字节的 `ByteBuffer` 对象了。你可以使用这个对象来进行后续的操作,比如写入文件或者发送给其他程序。 示例代码如下: ```java import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; public class UnicodeToGBK { public static void main(String[] args) throws Exception { // 获取 GBK 编码的 Charset 对象 Charset gbkCharset = Charset.forName("GBK"); // 创建 CharsetEncoder 对象 CharsetEncoder encoder = gbkCharset.newEncoder(); // 要转换Unicode 编码的字符串 String unicodeString = "Hello, 世界"; // 将 Unicode 编码的字符串转换GBK 编码 ByteBuffer byteBuffer = encoder.en ### 回答2: 在Java中,可以使用Java编码库提供的字符编码转换类`Charset`和字节编码类`CharsetEncoder`来实现UnicodeGBK转码。 首先,我们需要将Unicode字符串编码为字节序列。可以使用`Charset`类的静态方法`forName`来获取指定编码方式的实例,如`Charset.forName("Unicode")`获取Unicode编码的实例。 然后,我们可以调用`CharsetEncoder`类的`encode`方法将Unicode字符串转换为字节序列。这可以通过创建一个`CharBuffer`实例来完成,将Unicode字符串放入`CharBuffer`中,然后调用`CharsetEncoder`的`encode`方法。最终,我们可以使用`ByteBuffer`类的`array`方法获取到转换后的字节序列。 接下来,我们需要将字节序列转换GBK编码的字符串。可以使用`Charset.forName("GBK")`获取GBK编码的实例,然后将字节序列放入`ByteBuffer`中,并调用`CharsetDecoder`类的`decode`方法,将字节序列解码为GBK编码的字符串。 以下是一个示例代码: ```java import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; public class UnicodeToGBKConverter { public static String unicodeToGBK(String unicode) { Charset unicodeCharset = Charset.forName("Unicode"); CharsetEncoder encoder = unicodeCharset.newEncoder(); Charset gbkCharset = Charset.forName("GBK"); CharsetDecoder decoder = gbkCharset.newDecoder(); CharBuffer unicodeBuffer = CharBuffer.wrap(unicode); ByteBuffer unicodeBytes; try { unicodeBytes = encoder.encode(unicodeBuffer); } catch (Exception e) { e.printStackTrace(); return null; } ByteBuffer gbkBytes = ByteBuffer.allocate(unicodeBytes.limit()); try { gbkBytes.put(unicodeBytes.array()); gbkBytes.rewind(); } catch (Exception e) { e.printStackTrace(); return null; } String gbkString; try { gbkString = decoder.decode(gbkBytes).toString(); } catch (Exception e) { e.printStackTrace(); return null; } return gbkString; } public static void main(String[] args) { String unicodeString = "你好"; String gbkString = unicodeToGBK(unicodeString); System.out.println("GBK string: " + gbkString); } } ``` 以上代码将输出`GBK string: 浣犲ソ`,即将Unicode编码的字符串"你好"转码GBK编码的字符串"浣犲ソ"。 ### 回答3: Java中提供了 `java.nio.charset.Charset` 类来进行字符编码转换。下面是一个将中文Unicode编码GBK编码的示例程序: ```java import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class UnicodeToGBKConverter { public static String convert(String unicodeString) { // 将Unicode字符串为字节数组 byte[] unicodeBytes = unicodeString.getBytes(StandardCharsets.UTF_16BE); // 将字节数组从Unicode编码GBK编码 byte[] gbkBytes = new String(unicodeBytes, StandardCharsets.UTF_16BE).getBytes(Charset.forName("GBK")); // 将字节数组GBK编码的字符串 return new String(gbkBytes, Charset.forName("GBK")); } public static void main(String[] args) { String unicodeString = "\u4E2D\u6587"; // 中文Unicode编码字符串 String gbkString = convert(unicodeString); System.out.println(gbkString); // 输出: 中文 System.out.println(gbkString.getBytes(Charset.forName("GBK"))); // 输出: [-42, -48, -58, -67] } } ``` 上述示例中,`convert` 方法将输入的Unicode编码字符串为字节数组,再使用 `GBK` 字符集进行解码转换,最后将字节数组GBK编码的字符串输出。 `main` 方法中的 `unicodeString` 是中文Unicode编码字符串,经过转换后输出的 `gbkString` 为对应的GBK编码字符串。同时也可以通过 `getBytes` 方法获取转换后的字节数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值