4

文字を入力できるシンプルなフォームがあります。これらの文字は、getBytes を実行してバイトを出力するサーブレットに送信されます。「ã」の正しい UTF-8 バイトは -61 と -93 ですが、-52 と -93 になります。:(

これを理解して修正するためにあらゆることを試みましたが、何も機能しませんでした。私のマシンのすべては UTF-8 でなければならないので、私が 20 年間使用してきた US International キーボードに関係していると思われます。

-52 と -93 がどこから来ているのか、頭の良い人はいますか?

Jetty で修正済み: 以下の私の回答を参照してください。

Tomcat の BROKEN: Tomcatに Mac キーボードから MacRoman (x-mac-roman) 文字セットを理解させる方法は?

4

2 に答える 2

9

それがMac OS Roman 文字エンコーディングです。(0xBB == -52.)

確認事項:

  • getBytes(string, "UTF-8")new String(bytes, "UTF-8")
  • フォームは UTF-8: で送信されているはずですresponse.setContentType("text/html; charset="UTF-8");。JSP 内<%@page pageEncoding="UTF-8"%>
  • <form action="..." accept-charset="UTF-8">

役に立たなかったすべてとして:

Web アプリケーション (web-xml) で要求フィルタリングを設定します。


pom.xml でのエンコード:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>...</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>...</version>
    <configuration>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>
...
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
于 2012-04-28T21:37:10.773 に答える
3

わかりました、8 時間後 (深刻です!)、これを正しく機能させる唯一の方法は次のようにすることです。

問題の 1 つは、クラス ファイルの不適切な maven ビルド エンコーディング コンパイルでした。

export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
mvn clean install

と:

   <%@page pageEncoding="UTF-8" %>

今:

pom.xml で後者のオプションを渡すことを知る方法はありません。

これに対する保留中の回答は次のとおりです。 ClojureソースファイルのUTF-8エンコーディングを有効にする

于 2012-04-28T23:33:14.517 に答える