AndroidStudioでjdk1.8を使用した際に日本語が文字化けする
- 評価
- クリップ 0
- VIEW 3,712
AndroidStudioでjdk1.8使用時に文字化けが発生する
現在開発中のアプリでラムダ式を使用できるようにしたいと思い、jdk1.8に変更したらハードコーディングされている日本語の文字列が文字化けするようになってしまいました。
(以前jdk1.7を使用していた際には、文字化けせず表示されておりました。またString.xmlなどに記述した文字列は文字化けしません。)
どのように修正すればjdk1.8を使用しつつ、日本語の文字列をハードコーディングできるようになるでしょうか。
文字化け内容
String hoge = "無";
出力結果:辟。
(ソースコードはUTF-8で記述されているが、コンパイル時にSJISになってる?)
試したこと
Build.gradle(project)に下記を追加(効果なし)
allprojects {
repositories {
jcenter()
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
}
現在のbuild.gradle(app)
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
//jdk1.8用に追加
jackOptions {
enabled true
}
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
//jdk1.8用に追加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// for android
compile 'com.android.support:appcompat-v7:25.+'
compile 'com.android.support:design:25.+'
// for common
compile 'com.fasterxml.jackson.core:jackson-databind:latest.release'
compile 'com.fasterxml.jackson.core:jackson-core:latest.release'
compile 'com.fasterxml.jackson.core:jackson-annotations:latest.release'
compile 'com.squareup.okhttp:okhttp:latest.release'
compile 'com.squareup.okhttp:okhttp-urlconnection:latest.release'
// for test
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
}
補足情報(言語/FW/ツール等のバージョンなど)
AndroidStudio2.2.3
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
あー、もしかしたらこれ?
stackoverflow - Android displays text in wrong encoding after update to Java 8
Java8を使う際に使用する必要がある、Jackツールチェーンに問題がある様子
JVMのエンコードを参照して使っているらしいので、
gradle.propertiesに
org.gradle.jvmargs=-Dfile.encoding=UTF-8
入れれば解決できるかもと・・・
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
ハードコーディングされている日本語の文字列が文字化けするようになってしまいました
何とかしたいという気持ちはよくわかりますが
>String.xmlなどに記述した文字列は文字化けしません。
そもそもこういう問題を回避するためにString.xmlがあると思います
文字列リソース
今回何かの解決策が見つかってもそれは一時的で
問題が発生する危険性は依然として含まれていると思います(自戒を込めて)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
回答ではなくて調査するときのヒントです。Android Studioについては無知なので具体的な回答でなくてすみません
ソース上の文字が出力すると化けるといった場合、以下のいずれかが考えられます。
- コンパイル時のソースエンコーディングの問題
- 出力する際のエンコーディングの問題
最初に切り分けをして問題を明確にしたほうがよいと思います。ユニコードでは'無'は'\u7121'ですので以下のコードでeがtrue/falseのいずれかにより確認できます。
boolean e = '無' == '\u7121';
コンパイル時のエンコーディングが正常でありさえすればどのプラットフォームであろうともeは必ずtrueになります。これがfalseならコンパイル時の問題、trueなら出力の仕方の問題です。
追記:
ソースファイルのエンコーディングの問題らしいことがコメントからわかりました。ところで自分はAndroid Studioの兄弟(?)のIntelliJ IDEAを使用していますがgradleは使わずにIDEにコンパイルはおまかせな人です。そこではアドバイスできないのですが、一つだけ便利な機能があるのでコメントします。
IDEAでもAndroid Studioでも画面右下に選択中のソースの文字エンコーディングが表示されているのでそこを見れば確認できます。またそこをクリックすると「文字のエンコーディングを任意に変換」したり「変換はせずにエンコーディング設定のみ変更」なんて芸当ができます。昔のIDEAにはなかった機能なので最近のバージョンでしか使えないのかも知れません。この機能を使えるならWindows-31J <-> UTF8の変換が割と手軽にできるので試してみたらどうでしょう。(ただしエンコード変換するとソースが壊れる可能性もあるのでバックアップはお忘れなくです)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/02/22 17:43
2017/02/23 11:05
ありがとうございます!