GVKun编程网logo

如何在servlet中处理UTF-8编码的字符串(servlet utf-8)

8

如果您想了解如何在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)

如何在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?

c# – 如何将已经两次UTF-8编码的字符串解码为简单的UTF-8?

我有一个巨大的 MySQL表,其行以UTF-8编码两次.
例如,“Újratárgyalja”存储为“Újratárgyalja”.

MysqL .Net连接器以这种方式下载它们.我尝试了很多与System.Text.Encoding.Convert()的组合,但没有一个工作.

发送集名称’utf8′(或其他字符集)无法解决它.

如何将它们从双UTF-8解码为UTF-8?

解决方法

特殊问题,但我认为我可以通过UTF-8和Latin-1的适当混合来重现它(不仅仅是两次使用UTF-8而没有在Latin-1中插入错误的步骤).这是整个奇怪的往返,“那里又回来了”( Python 2. *或IronPython都应该能够重现这一点):
# -*- 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编码

HttpServletRequest UTF-8编码

我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,request.setCharacterEncoding("UTF-8")但也没有用。

我知道URLDecoder.decode(request.getQueryString(),"UTF-8")返回正确的字符,但request.getParameterValues()不起作用!

有人有主意吗?

java中怎么比较utf-8编码的字符串和ascii编码字符串

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编码的中英文混合字符串

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编码的中英文混合字符串的相关信息,可以在本站进行搜索。

本文标签: