2016-08-10 13 views
0

最新のVertx 3.2.2にアップグレードして以来、StaticHandlerはWindows-1252エンコーディングを使用してファイルシステムから静的なcss、htmlなどのリソースを返します。以前のバージョンのVertxでは、エンコーディングを教えていませんでした。vertex.ioの文字エンコーディングを設定する方法staticHandler?

ここで、すべてのutf-8データ(iconfontアイコンの文字など)が文字化けしています。

ファイルの先頭に手動でUTF8 BOMを追加しようとしましたが、StaticHandlerはWindows-1252として機能します(しかし、少なくともブラウザはutfマーカーを認識してうまくレンダリングできます)。

好きな文字エンコーディングを強制するにはどうしたらいいですか、statichandlerでファイルエンコーディングを認識させるにはどうしたらいいですか?

+0

ファイルエンコーディングシステムのプロパティを設定しようとしましたか? '-Dfile.encoding = UTF-8' – tsegismont

+0

いいえ、でも今は試しました。残念ながら助けにはならない。 (そこには、vertxのシステムプロパティの完全なリストがあるのでしょうか?また、vertx.cwdの検索に1時間かかりました) –

+0

あなたは正しいかもしれません。しかし、これは他のパラメータと異なり、System.setPropertyは動作しないため、コマンドライン引数として指定する必要があります。私は素晴らしい回避策を見つけました。 –

答えて

0

自分の質問に答える:そのための具体的なVert.xプロパティがありませんSetting the default Java character encoding?

+0

GitHubのvertx-webプロジェクトで問題を開くことはできますか?あなたが以前に持っていたバージョンと理想的には少し再生したバージョンを示しますか? 3.2.2のリリースはありませんので、おそらく3.3.2についてのことですか? – tsegismont

+0

問題を作成しました。[vert.x issue 221](https://github.com/vert-x3/issues/issues/221)を参照してください。 –

2

:から

System.setProperty("file.encoding","UTF-8"); 
Field charset = Charset.class.getDeclaredField("defaultCharset"); 
charset.setAccessible(true); 
charset.set(null,null); 

を。 あなたが実際StaticHandlerImpl実装を見れば、あなたはどのようなそれがないことは、単純であることがわかります:

文字セットは、標準のJavaクラスです
String defaultContentEncoding = java.nio.charset.Charset.defaultCharset().name(); 

。 VMオプションで-Dfile.encoding=UTF-8を設定すると、Vert.xで動作します。

非常にハッキーなので、この問題を解決するためにリフレクションを使用することを強くお勧めします。

+0

アドバイスをいただきありがとうございます! 私は反射を使用することに同意します。一方、vert.xからは、任意のプラットフォーム固有の文字セットを持つutf8ファイルを提供するのは良いことではありません。 誤ってランタイムパラメータをオフにしておくと、Webアプリケーションに奇妙な問題が生じる可能性があるため、リフレクションベースのソリューションを維持することをお勧めします。 Play!フレームワークは単にすべてがutf-8であることを強制します。それは任意ですが、少なくとも合理的には良いです。 –

関連する問題