Tag: 字符编码

从String.getBytes(“UTF-8”)处理UnsupportedEncodingException的推荐方法

在库方法中调用String.getBytes(“UTF-8”)时,处理UnsupportedEncodingException的推荐方法是什么? 如果我正确地阅读http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html,UTF-8编码应始终可用,这让我相信没有将此exception传递给库的使用者的原因(即,向方法签名添加throws子句)。 似乎任何使UTF-8编码设施不可用的故障模式都是灾难性的,导致我编写这个处理程序: try { …. return “blah”.getBytes(“UTF-8”); } catch (UnsupportedEncodingException e) { // we’re assuming UTF-8 encoding is always available. // see // http://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html e.printStackTrace(); return null; //prevent compile-time “method must return a result” errors } 是否存在此代码段无法解决的故障模式?

如何从整数值中打印java中的扩展ASCII代码

public static void main(String[] args) { int i=153; int j=63; System.out.println((char)i); System.out.println((char)j); } OUTPUT:- ? ? 我有一些想法为什么这个奇怪的输出..但任何人都可以给我一些想法,以便我也可以打印扩展的ASCII …

Servlet在Mac上使用美国国际键盘变得奇怪

我有一个简单的表单,我可以输入一些字符。 这些字符被发送到一个servlet,它执行getBytes并打印字节。 “ã”的正确UTF-8字节是-61和-93,但我得到-52和-93。 🙁 我尝试了一切来理解和解决这个问题,但没有任何效果。 我的机器上的所有东西都应该是UTF-8,所以我怀疑它与我使用了20年的美国国际键盘有关。 有没有聪明的灵魂从-52和-93来自哪里? 在Jetty上固定:请参阅下面的答案。 Tomcat上的BROKEN: 如何让我的Mac键盘让tomcat了解MacRoman(x-mac-roman)字符集?

如何确保字符串是UTF-8?

如何将此String the surveyÂ’s rules转换为Scala中的UTF-8 ? 我尝试过这些道路,但不起作用: scala> val text = “the surveyÂ’s rules” text: String = the surveyÂ’s rules scala> scala.io.Source.fromBytes(text.getBytes(), “UTF-8″).mkString res17: String = the surveyÂ’s rules scala> new String(text.getBytes(),”UTF8”) res21: String = the surveyÂ’s rules 好的,我这样解决了。 不是转换,而是简单的阅读 implicit val codec = Codec(“US-ASCII”).onMalformedInput(CodingErrorAction.IGNORE).onUnmappableCharacter(CodingErrorAction.IGNORE) val src = Source.fromFile(new File (folderDestination + name + “.csv”)) val […]

UTF-8和UTF-16之间是否存在巨大差异?

我调用了一个webservice,它给了我一个具有UTF-8编码的响应xml。 我在java中使用getAllHeaders()方法检查了它。 现在,在我的java代码中,我接受了该响应,然后对其进行了一些处理。 然后,将其传递给不同的服务。 现在,我google了一下,发现默认情况下,Java中的字符串编码是UTF-16。 在我的回复xml中,其中一个元素有一个字符É。 现在这搞砸了我对不同服务的后处理请求。 它没有发送É,而是发送了一些乱七八糟的东西。 现在我想知道,这两种编码真的会有很大不同吗? 如果我想知道什么将从UTF-8转换为UTF-16,那么我该怎么做呢? 谢谢

日语和中文的上传文件名编码问题

我目前正在使用jQuery-File-Upload 。 我可以上传一些带有日文或中文文件名的文件,我可以看到文件名是例如浏览器调试模式中的“お疲れ様です.txt”或“测试文档.txt”,但是在后端(Java) ,它们变成了“ -ãã,Œæ§~㠧㠙.txt”和“æμ<试æ-‡æ¡£.txt”。 我曾经尝试将formAcceptCharset设置为UTF-8,但它不起作用。 题: 解析MultipartFormData时如何在Java端获取正确的文件名? 提前致谢。 BTW,以下是我的数据 —————————–25382434931419 Content-Disposition: form-data; name=”file”; filename=”ã?Šç–²ã‚Œæ§˜ã?§ã?™.txt” Content-Type: text/plain …. 添加Java代码 事实上我目前在Java方面什么都没做, @POST @Consumes(MediaType.MULTIPART_FORM_DATA) public String upload(InMultiPart inMP) { while (inMP.hasNext()) { InPart part = inMP.next(); MultivaluedMap headers = part.getHeaders(); String fileName = null; if (!headers.containsKey(“Content-Disposition”)) { continue; } else { // get the file […]

Javamail改变了主题行的字符集

我正在使用Javamail(javax.mail)发送邮件。 我成功调整了邮件内容为utf-8。 但是我无法将主题行设置为utf-8编码的字符串。 我甚至试过了 mail.setSubject(new String(subject.getBytes(“utf-8”), “utf-8”)); 然而它仍然作为Cp1252发送。 邮件的示例标题如下: 有任何想法吗? 来自邮件标题的示例http://m.friendfeed-media.com/a328a80db12f3c17a8aed06be106045354355abf

更改HttpServletResponse的编码

我有一个返回XML的API,它实际上使用默认编码返回它(我相信它是UTF-8),但现在需求已经改变,我们需要返回UTF-16LE中的所有内容。 我的问题是:有一种简单的方法吗? 我可以在呼叫完成之前访问响应,所以我想知道我是否可以做类似的事情 //This method does not exist response.setCharacterEncoding(“UTF-16LE”); 非常感谢! 更新:提到的方法是使用的方法。 我使用的是不包含它的servlet API的旧版本(2.3)。 更改版本修复了所有问题。

Java Jersey:接收表单参数作为字节数组

是否可以使用Jersey接收form参数作为字节数组? 我尝试了以下方法: @Path(“/someMethod”) @POST @Produces(MediaType.TEXT_HTML) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public String someMethod(@FormParam(“someParam”) byte[] someParam) { return “”; } 但得到了这个错误: SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for method public java.lang.String SomeClass.someMethod(byte[]) at parameter at index 0 SEVERE: Missing dependency for method public java.lang.String SomeClass.someMethod(byte[]) at parameter at index […]

计算字符长度的有效方法,具体取决于编码方式

考虑到字符编码,计算字符字节长度的最有效方法是什么? 编码只能在运行时知道。 例如,在UTF-8中,字符具有可变字节长度,因此需要单独确定每个字符。 到目前为止,我已经想出了这个: char c = getCharSomehow(); String encoding = getEncodingSomehow(); // … int length = new String(new char[] { c }).getBytes(encoding).length; 但是这在循环中是笨拙和低效的,因为每次都需要创建一个new String 。 我在Java API中找不到其他更有效的方法。 有一个String#valueOf(char) ,但根据它的来源它基本上与上面相同。 我想这可以通过像位移这样的按位运算来完成,但这是我的弱点,我不确定如何在这里考虑编码:) 如果您对此有疑问,请查看此主题 。 更新: @Bkkbrad的答案在技术上是最有效的: char c = getCharSomehow(); String encoding = getEncodingSomehow(); CharsetEncoder encoder = Charset.forName(encoding).newEncoder(); // … int length = encoder.encode(CharBuffer.wrap(new char[] { […]