Confluence に XML バックアップをリストアしたときの "Incorrect string value" エラー
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
問題
XML バックアップを Confluence にリストアしようとしたときに、プロセスが停止してエラーが表示される。
The following appears in the atlassian-confluence.log
logExceptions Incorrect string value: '\xF0\x9F\x98\x80</...' for column 'BODY' at row 1
または
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8D\xBA ...' for column 'BODY' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
または
An invalid XML character (Unicode: 0xffff) was found in the CDATA section
原因
XML に上述の例の 4 バイトの Unicode 文字のような無効な文字が含まれており、その文字に使用中のデータベースとの互換性がない。この無効な文字の原因は、MySQL のこちらのバグです。しかしながら、Confluence での 4 バイトの UTF-8 文字の処理を改善する旨の改善リクエストがあります。
Confluence について、0xFFFF エラーに関連して起票されているバグもあります。
回避策
データベースから無効な文字を削除します。
- atlassian-xml-cleaner-0.1.jar をダウンロードします。
- コマンド プロンプトを開き、コンピューター上で XML または ZIP のバックアップ ファイルを見つけます。ZIP ファイル内にある場合はそれが展開されていることを確認します。この例では
entities.xml
を使います。 次のようにクリーナーを実行します。
$ java -jar atlassian-xml-cleaner-0.1.jar entities.xml > entities-clean.xml
Sometimes the invalid characters can also exist in the Plugin Data which located in the
activeObjectsBackupRestoreProvider.pdata
file that needs to be cleaned using the cleaner as well (file is included the zip file however sometimes not visible before extracting the zip file).無効な文字が削除された
entities-clean.xml
が、entities.xml
のコピーとして作成されます。- Copy the
entities-clean.xml
file into another directory, rename it back toentities.xml
and create a new ZIP with the entities.xml
file.
Note: The zip file should contain the Attachments folder as well. If this folder is not included the attachments will show up as broken links or broken images.
Linux サーバーをご利用の場合、次のコマンドを利用します。
# this will recreate entities.xml in the current directory:
unzip <path>/Confluence-backup.zip entities.xml
# fix the entities file, saving its output to a new file (entities-clean.xml):
java -jar atlassian-xml-cleaner-0.1.jar entities.xml > entities-clean.xml
# rename the original entities file
mv entities.xml entities-original.xml
# rename the fixed entities file to the expected name
mv entities-clean.xml entities.xml
# update the zip file with the new entities.xml file
zip -u <path>/Confluence-backup.zip entities.xml
参考:
影響を受ける文字として 0xffff が表示されるエラーを確認している場合、ファイルの修正にこの perl コマンドを使います。
perl -i -pe 's/\xef\xbf\xbf//g' entities.xml
0xfffe のエラーの場合は次の perl コマンドを使います。
perl -i -pe 's/\xef\xbf\xbe//g' entities.xml
Windows をご利用で、上述の Perl コマンドが動作しない場合、問題を修正するために次の Power Shell スクリプトを利用できます。
$yourfile = "PATH_TO_THE_XML\entities.xml"
$outputfile = "PATH_TO_SAVE_NEW_XML\entities_clean.xml"
get-content -path $yourfile | out-file $outputfile -encoding utf8