38638


Jenkins 2.80、P4 Plugin 1.75を使用しています。  
JenkinsのP4PluginにてCharacterSetにshiftjisが使用できない問題を教えていただきたいと思います。

以下、詳細です。

Jenkinsのソースコードの管理にてPerforce Softwareを選択し、以下の様にCharacter
Setに「shiftjis」を設定しています。  
[![画像の説明をここに入力](https://i.stack.imgur.com/iIcel.png)](https://i.stack.imgur.com/iIcel.png)

この状態でビルドを実行すると「P4-ShiftJISはサポートしてません」というエラーが発生します。

[code]

    SCMのポーリングが実行
    ビルドします。 ワークスペース: C:\Jenkins\workspace\Project
    ... p4 client -o jenkins_Project
     +
    ... p4 info
     +
    FATAL: P4-ShiftJIS
    java.nio.charset.UnsupportedCharsetException: P4-ShiftJIS
     at java.nio.charset.Charset.forName(Unknown Source)
     at com.perforce.p4java.impl.mapbased.server.Server.setCharsetName(Server.java:751)
     at org.jenkinsci.plugins.p4.client.ClientHelper.clientLogin(ClientHelper.java:129)
     at org.jenkinsci.plugins.p4.client.ClientHelper.<init>(ClientHelper.java:108)
     at org.jenkinsci.plugins.p4.tasks.AbstractTask.getConnection(AbstractTask.java:208)
     at org.jenkinsci.plugins.p4.tasks.AbstractTask.setWorkspace(AbstractTask.java:80)
     at org.jenkinsci.plugins.p4.PerforceScm.checkout(PerforceScm.java:426)
     at hudson.scm.SCM.checkout(SCM.java:495)
     at hudson.model.AbstractProject.checkout(AbstractProject.java:1212)
     at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:566)
     at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
     at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:491)
     at hudson.model.Run.execute(Run.java:1724)
     at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
     at hudson.model.ResourceController.execute(ResourceController.java:97)
     at hudson.model.Executor.run(Executor.java:419)
[/code]

  
文字化けしてしまいますが他の文字コード（UTF8など）ではファイルの取得はできています。

Perforceから直接ファイルの取得を行うと、文字コードshiftjisで取得できています。

Javaの問題だとは思いますが、あまり詳しくないので、ご協力の程よろしくお願いいたします。


CC BY-SA 3.0
2017-10-03T07:58:16.793
38387
2017-10-12T09:31:01.537
25629
question
jenkins
Jenkinsのp4-pluginにてワークスペースのCharacter Setにshiftjisを使うとエラーになります


おそらく、P4(※このソフトウェア自体を私は使ったことないので知りませんが...)のコマンドラインツールか何かで文字セットをセットするような対応が必要なのだと思います。

時間があったので、ちょっとソースコードを見てみましたが、`com.perforce.p4java.server.PerforceCharsets()`のstaticイニシャライザーに、以下のようなマップを生成する処理がありました。

[code]

    static {
        Map<String, String> map = new HashMap<>();
        map.put("none", "none");
        map.put("utf8", "UTF-8");
        map.put("iso8859-1", "ISO-8859-1");
        map.put("utf16-nobom", "UTF-16");
        // shiftjis (JDK Shift_JIS charset is NOT the same as Perforce shiftjis)
        // Perforce shiftjis (MS932) is a superset of Shift_JIS (SJIS).
        // p4ToJavaCharsets.put(knownCharsets[count++], "Shift_JIS");
        // shiftjis (Perforce implementation of Microsoft code page 932)
        // P4-ShiftJIS is a charset wrapped around the JDK MS932 charset,
        // with some Perforce specific updates.
        // Note: Perforce shiftjis is suppose to be a full MS932 implementation.
        map.put("shiftjis", "P4-ShiftJIS");
        map.put("eucjp", "EUC-JP");
        map.put("winansi", "windows-1252");
    
        ・・・
    
[/code]

このマップを使って、`shiftjis`を`P4-ShiftJIS`という独自の文字セットに変換しています。で、最終的に`Charset.forName()`の引数に`P4-ShiftJIS`を渡して、`UnsupportedCharsetException`が発生しています。

`Charset.forName()`で`UnsupportedCharsetException`がスローされるのは、`Charset`の[Javadoc](https://docs.oracle.com/javase/jp/8/docs/api/java/nio/charset/Charset.html#forName-
java.lang.String-)に記載されている通り、指定された文字セットが現在のJava仮想マシンで利用できない場合です。

[このあたりのページ](https://www.toyo.co.jp/ss/contents/detail/technical_note066.html)や`p4java-2017.2.1577651-sources.jar`を解凍してソースコードを読んでみて下さい。どのような対応すべきか分かると思います。


CC BY-SA 3.0
2017-10-12T09:31:01.537
38638
2017-10-12T09:31:01.537
21092
38387
answer