如果您想了解如何在servlet中处理UTF-8编码的字符串和servletutf-8的知识,那么本篇文章将是您的不二之选。我们将深入剖析如何在servlet中处理UTF-8编码的字符串的各个方面,并
如果您想了解如何在servlet中处理UTF-8编码的字符串和servlet utf-8的知识,那么本篇文章将是您的不二之选。我们将深入剖析如何在servlet中处理UTF-8编码的字符串的各个方面,并为您解答servlet utf-8的疑在这篇文章中,我们将为您介绍如何在servlet中处理UTF-8编码的字符串的相关知识,同时也会详细的解释servlet utf-8的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 如何在servlet中处理UTF-8编码的字符串(servlet utf-8)
- c# – 如何将已经两次UTF-8编码的字符串解码为简单的UTF-8?
- HttpServletRequest UTF-8编码
- java中怎么比较utf-8编码的字符串和ascii编码字符串
- Lua截取utf-8编码的中英文混合字符串
如何在servlet中处理UTF-8编码的字符串(servlet utf-8)
现在已经连续搜索了四个小时,我不得不放弃,问你们。我有一个非常简单的表格,它将接受输入并采取行动,将其写入我的Oracle DB(支持UTF-8)。
<form action="test.jsp" method=''GET'' accept-charset="UTF-8"> <label for=''NAME''>Name</label><input type="text" id="NAME" name="NAME"/> <button type="submit">Submit</button> </form>
我要做的就是能够接受诸如é
或的字符请
并在不更改编码的情况下存储它们的形式。
我已经尝试过(并结合使用)设置等选项
request.setCharacterEncoding("UTF-8");
或使用编码参数构建一个新的String:
new String(request.getParameter("NAME").getBytes(), "UTF-8")
但它总是在数据库中像这样结束:�?��??
(输入收藏
)
在这个问题上的任何帮助将不胜感激。
答案1
小编典典在Tomcat中server.xml
,像这样添加URIEncoding="UTF-8"
属性Connector
:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
该文档指出:
在%xx解码URL之后,这指定用于解码URI字节的字符编码。如果未指定,将使用ISO-8859-1。
一个有用的(有点相关)的SO帖子可以在这里找到。
c# – 如何将已经两次UTF-8编码的字符串解码为简单的UTF-8?
例如,“Újratárgyalja”存储为“Újratárgyalja”.
MysqL .Net连接器以这种方式下载它们.我尝试了很多与System.Text.Encoding.Convert()的组合,但没有一个工作.
发送集名称’utf8′(或其他字符集)无法解决它.
如何将它们从双UTF-8解码为UTF-8?
解决方法
# -*- coding: utf-8 -*- uni = u'Újratárgyalja' enc1 = uni.encode('utf-8') enc2 = enc1.decode('latin-1').encode('utf-8') dec3 = enc2.decode('utf-8') dec4 = dec3.encode('latin-1').decode('utf-8') for x in (uni,enc1,enc2,dec3,dec4): print repr(x),x
这是有趣的输出……:
u'\xdajrat\xe1rgyalja' Újratárgyalja '\xc3\x9ajrat\xc3\xa1rgyalja' Újratárgyalja '\xc3\x83\xc2\x9ajrat\xc3\x83\xc2\xa1rgyalja' Ãjratárgyalja u'\xc3\x9ajrat\xc3\xa1rgyalja' Ãjratárgyalja u'\xdajrat\xe1rgyalja' Újratárgyalja
以Ã开头的奇怪字符串显示为enc2,即两个utf-8编码,其中散布的latin-1解码投入到混合中.正如您所看到的那样,它可以通过完全相反的操作序列来解除:解码为utf-8,重新编码为latin-1,再次重新解码为utf-8 – 原始字符串又回来了(yay !).
我相信Latin-1(又名ISO-8859-1)和UTF-8的正常往返特性应该保证这个序列能够正常工作(抱歉,没有C#可以立即尝试使用该语言,但我会期望编码/解码序列不应该依赖于使用的特定编程语言.
HttpServletRequest UTF-8编码
我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,request.setCharacterEncoding("UTF-8")
但也没有用。
我知道URLDecoder.decode(request.getQueryString(),"UTF-8")
返回正确的字符,但request.getParameterValues()
不起作用!
有人有主意吗?
java中怎么比较utf-8编码的字符串和ascii编码字符串
从一个utf-8编码的文本文件中读出的“quit”编码是:[-17, -69, -65, 113, 117, 105, 116]
但是直接在java程序源文件使用的“quit”的编码是[113, 117, 105, 116],
在使用a.equal(b)时,不能判断他俩相等。这个应该怎么判断呢~
Lua截取utf-8编码的中英文混合字符串
参考博客:UTF8字符串在lua的截取和字数统计【转载】
需求
按字面个数来截取子字符串
函数(字符串, 开始位置, 截取长度) utf8sub("你好1世界哈哈",2,5) = 好1世界哈 utf8sub("1你好1世界哈哈",2,5) = 你好1世界 utf8sub("你好世界1哈哈",1,5) = 你好世界1 utf8sub("12345678",3,5) = 34567 utf8sub("øpø你好pix",2,5) = pø你好p
错误方法
网上找了一些算法, 都不太正确; 要么就是乱码, 要么就是只考虑了4 byte 中文的情况, 不够全面
1. string.sub(s,1,截取长度*4)
网上很多直接使用"`""string.sub(s,1,截取长度*4)`"是肯定不对的, 因为如果中英文混合的字符串, 例如`你好1世界`的字符长度分别是`4,4,1,4,4`, 如果截取4个字, 4*4=4+4+1+4+3, 那`世界`的`界`字将会被取前3个byte, 就会出现乱码
2. if byte>128 then index = index + 4
问题关键
1. utf8字符是变长字符
2. 字符长度有规律
如文字符编码中所列,utf-8是对unicode字符集的编码方案。因此其变长编码方式为:
一字节:0*******
两字节:110*****,10******
三字节:1110****,10******,10******
四字节:11110***,10******,10******,10******
五字节:111110**,10******,10******,10******,10******
六字节:1111110*,10******,10******,10******,10******,10******
因此,拿到字节串后,想判断UTF8字符的byte长度,按照上文的规律,只需要获取该字符的首个Byte,根据其值就可以判断出该字符由几个Byte表示。
其代码如下:
local funciton charsize(ch) if not ch then return 0 elseif ch >=252 then return 6 elseif ch >= 248 and ch < 252 then return 5 elseif ch >= 240 and ch < 248 then return 4 elseif ch >= 224 and ch < 240 then return 3 elseif ch >= 192 and ch < 224 then return 2 elseif ch < 192 then return 1 end end
-- 计算utf8字符串字符数, 各种字符都按一个字符计算 -- 例如utf8len("1你好") => 3 function utf8len(str) local len = 0 local aNum = 0 --字母个数 local hNum = 0 --汉字个数 local currentIndex = 1 while currentIndex <= #str do local char = string.byte(str, currentIndex) local cs = charsize(char) currentIndex = currentIndex + cs len = len +1 if cs == 1 then aNum = aNum + 1 elseif cs >= 2 then hNum = hNum + 1 end end return len, aNum, hNum end
-- 截取utf8 字符串 -- str: 要截取的字符串 -- startChar: 开始字符下标,从1开始 -- numChars: 要截取的字符长度 function utf8sub(str, startChar, numChars) local startIndex = 1 while startChar > 1 do local char = string.byte(str, startIndex) startIndex = startIndex + chsize(char) startChar = startChar - 1 end local currentIndex = startIndex while numChars > 0 and currentIndex <= #str do local char = string.byte(str, currentIndex) currentIndex = currentIndex + chsize(char) numChars = numChars -1 end return str:sub(startIndex, currentIndex - 1) end -- 自测 function test() -- test utf8len assert(utf8len("你好1世界哈哈") == 7) assert(utf8len("你好世界1哈哈 ") == 8) assert(utf8len(" 你好世 界1哈哈") == 9) assert(utf8len("12345678") == 8) assert(utf8len("øpø你好pix") == 8) -- test utf8sub assert(utf8sub("你好1世界哈哈",2,5) == "好1世界哈") assert(utf8sub("1你好1世界哈哈",2,5) == "你好1世界") assert(utf8sub(" 你好1世界 哈哈",2,6) == "你好1世界 ") assert(utf8sub("你好世界1哈哈",1,5) == "你好世界1") assert(utf8sub("12345678",3,5) == "34567") assert(utf8sub("øpø你好pix",2,5) == "pø你好p") print("all test succ") end test()
我们今天的关于如何在servlet中处理UTF-8编码的字符串和servlet utf-8的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 如何将已经两次UTF-8编码的字符串解码为简单的UTF-8?、HttpServletRequest UTF-8编码、java中怎么比较utf-8编码的字符串和ascii编码字符串、Lua截取utf-8编码的中英文混合字符串的相关信息,可以在本站进行搜索。
本文标签: