0 0

如何去掉字符串中的非UTF-8编码?10

使用Struts2接收iPhone客户端发来的请求,刚刚接收到的时候是做了URL Encode的,比如这个字符串:“%E8%BF%99%E6%98%AF%E4%B8%80%E6%AE%B5%E6%B5%8B%E8%AF%95%00%E7%94%A8%E7%9A%84%E6%96%87%E5%AD%97”。

但是这个字符串中包含了一个非UTF-8编码“%00”,目前所知产生的原因是使用了iPhone原生的文本框,在用户从其他App或者网页粘贴内容后提交的时候会带有一些额外的字符。为了兼容iOS5之后的emoji表情,目前采用的方法是数据库直接保存URL Encode之后的编码,在显示的时候进行Decode并输出,根本原因在于MySQL的编码使用的是GBK。

对于上述字符串,由于包含了非UTF-8编码的字符串,因此如果返回的结果是XML形式的时候客户端(比如iphone App)会出现XML解析失败导致整个页面空白的情况。请教在不改变现有程序实现的情况下(即不更换数据库编码、仍然保存URL Encode之后的字符串),能否通过其他手段过滤掉这些非法字符呢?比如通过正则表达式?

问题补充:%E6%B5%8B%00%E8%AF%95  可以将此字符串Url Decode后查看效果,在Eclipse里直接打印的话是个方块
2012年8月08日 15:34

2个答案 按时间排序 按投票排序

0 0

采纳的答案

结果

测{方块}试

只有%00是方块,对头的吧?

我的建议也是你自己说的用正则表达式把非法字符过滤掉。

看你的描述似乎不确定非法字符有哪些,那么就把所有 非 正常 字符 过滤掉。

比如正常字符包括:

- 数字,英文大小写,表达符号。

- 中文。

用正则把不是以上的字符都干掉的方向,具体区间可以参考这篇http://www.reai.us/chinese-in-utf8-and-gbk

但是,我仍然建议改DB编码吧,一了百了。

2012年8月08日 16:43
0 0

引用
这个是HTTP请求的时候产生的,可以使用 URLDecoder.decode 进行准换,过滤的话你可以在保存的时候进行转换这样就可以到达过滤非UTF-8 的 %00,%00是代表空格好像不能直接替换掉的,最好是先转码再操作

2012年8月08日 16:49

相关推荐

    判断字符串编码是utf-8还是gb2312

    判断字符串编码是utf-8还是gb2312 一、 开发环境 1、环境搭建:Windows 7+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0。 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要使用PHP通过对字符的ASCII码值进行判断,从而...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    将字符串从常用编码转为utf-8编码(java)

    Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8

    java 中文字符串,utf-8编码为byte数组的计算过程

    本文将深入探讨如何将中文字符串转换成UTF-8编码的字节数组,并解析这一过程中的计算步骤。UTF-8是一种广泛使用的Unicode字符编码,它可以表示Unicode字符集中的所有字符。 首先,我们需要明白Unicode字符集是一个...

    PB9转换utf-8例子

    标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...

    utf-8.rar_c++ string utf-8_string to utf-8_utf_utf 8_utf-8

    在C++编程中,UTF-8编码...总之,C++虽然没有内建的UTF-8支持,但通过`std::string`和第三方库,我们可以有效地处理UTF-8编码的字符串。理解UTF-8的编码规则以及如何在C++中操作它是现代跨平台编程中必不可少的知识点。

    C# 生成xml文件,编码为utf-8方法

    最后,使用 MemoryStream 对象的 ToArray 方法将 XML 数据转换为 byte 数组,然后使用 Encoding.UTF8.GetString 方法将其转换为 UTF-8 编码的字符串。 在上面的代码中,首先创建了一个 MemoryStream 对象,然后创建...

    UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_

    用户可以通过输入UTF-8编码的字符串,然后通过这个VI得到GBK编码的结果,以便在需要GBK编码的环境中使用。 LabVIEW的"转换编码"函数通常需要指定源编码和目标编码,对于这个特定的案例,源编码应该是UTF-8,目标...

    易语言判断UTF-8字符

    在易语言中,有时候我们需要判断一个字符串是否是UTF-8编码的,这就需要用到"IsTextUTF8"这样的函数。 `IsTextUTF8`函数是易语言中用于检测字符串是否符合UTF-8编码规范的函数。这个函数会检查字符串的每个字节,...

    判断字符串编码是utf-8还是gb23121

    判断字符串编码是utf-8还是gb2312 判断字符串编码是utf-8还是gb2312是PHP编程中一个常见的问题,本文将通过对字符的ASCII码值进行判断,从而来判断字符串的编码是utf-8还是gb2312。 PHP中判断字符串编码的方法有很...

    C++ 汉字UTF-8字符串处理类库

    很多人喜欢用CString 或std:string,但是他们的缺点是不能完成汉字各种类型之间的转换,提供三种类库ascString,ucsString,utfString以及工具utfCount,utf8_ucs2_t,tcf8_ucs4_t类库,用于各种字符串之间的直接转换`...

    UTF-8编码转化(Visual Basic)

    在Visual Basic编程环境中,处理UTF-8编码的文件或数据时,你需要理解如何读取、写入以及转换UTF-8格式的数据。以下是一些关键的知识点: 1. **Unicode与UTF-8**: Unicode是一个统一的字符集,包含世界上几乎所有...

    UTF-8 编码转换工具

    UTF-8编码是一种广泛使用的字符编码标准,尤其在网络和计算机系统中扮演着核心角色。它能够表示Unicode字符集中的所有字符,包括世界各地的各种语言。UTF-8的优势在于其兼容性和效率,不同平台和语言通常都能无缝...

    PB字符串转XML文件,解决PB12.5创建UTF-8文件BOM问题(powerbuilder 12.5)

    由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用新建一个UTF-8的TXT文件后,再进行COPY加内容。感觉这样操作...

    utf-8 互转 gb2312 转码

    首先,我们需要将UTF-8编码的字符串解码为Unicode,然后将Unicode转换为GB2312编码。反之,从GB2312转到UTF-8也是同样的逻辑,只是方向相反。 在Python编程语言中,我们可以使用`encode()`和`decode()`方法进行转码...

    字符编码转换类,支持 ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换

    对于ASCII字符,UTF-8编码与ASCII相同,都是单字节。UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_...

    gb2312,utf-8,utf-8-bom等编码格式的互相转换

    string utf8String = "UTF-8编码的字符串"; byte[] utf8Bytes = Encoding.UTF8.GetBytes(utf8String); string gb2312String = Encoding.GetEncoding("gb2312").GetString(utf8Bytes); ``` 3. 如果需要读取有BOM的...

    utf-8 ansi 字符互转 工具

    UTF-8和ANSI是两种常见的字符编码标准,它们各自有其特点和适用场景。本文将深入探讨UTF-8与ANSI字符编码的区别、转换方法以及相关工具。 首先,让我们了解这两种编码的基本概念: 1. **UTF-8**:全称为“Unicode ...

    GBK编码转换和UTF-8编码转换模块源码

    3. 对于UTF-8编码的字符串,由于UTF-8本身就是变长编码,每个Unicode字符可能对应1到4个字节,所以转换时需要逐字节处理,并根据字节流判断对应的Unicode字符,然后进行URL编码。 4. 返回URL编码后的字符串。 在...

    多字节与UTF-8、Unicode之间的转换

    - 再通过`WideCharToMultiByte`函数将宽字符字符串转换为UTF-8编码的字符序列。 2. **UTF8ToMB** 该函数实现了从UTF-8编码转换回多字节编码的过程。其流程与上述过程相反: - 先使用`MultiByteToWideChar`将...

Global site tag (gtag.js) - Google Analytics