dpkoch
(Daniel Koch)
2018 年 12 月 14 日午後 11:30
1
Vanilla フォーラムからのインポートを、こちら に掲載されている手順に従って行おうとしています。しかし、vanilla.rb のインポートスクリプトを実行すると、以下のエラーが発生します。
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
parsing file...
reading file...
Traceback (most recent call last):
5: from script/import_scripts/vanilla.rb:254:in `<main>'
4: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
3: from script/import_scripts/vanilla.rb:17:in `execute'
2: from script/import_scripts/vanilla.rb:37:in `parse_file'
1: from script/import_scripts/vanilla.rb:72:in `read_file'
script/import_scripts/vanilla.rb:72:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
こちら に記載されている手順に従って MySQL データベースの文字セットを UTF8 に変更し、その後ポータファイルを再エクスポートしてみましたが、問題は解決しませんでした。何か解決策はありますか?
「いいね!」 1
pfaffman
(Jay Pfaffman)
2018 年 12 月 15 日午後 1:09
2
You either need to keep trying to get it to really be UTF-8 or modify the import script to do it. It is a frustrating problem.
「いいね!」 2
pfaffman
(Jay Pfaffman)
2021 年 11 月 4 日午後 2:45
5
UTF-8 エンコーディングについてググることができます。テーブルを UTF-8 に強制変換するような「何か」を実行する必要があります。私が行ったときは、一部の行が一つの形式で、他の行が別の形式だったため、さらに複雑な問題が発生しました。私は値ごとに強制変換するような、どうしようもないことをやったと思います。
「いいね!」 1
ひどいですね…テーブルのエンコーディングをいじって、どうなるか試してみましょう。ありがとう!
pfaffman
(Jay Pfaffman)
2021 年 11 月 4 日午後 2:56
7
ああ、それはひどいね。1年以上前に1回だけやったことのある曖昧な記憶に基づくと、できる限り多くの異なる変換を試して、すべてのデータ、またはほとんどのデータに機能するものを見つけるのが最善策だと思う。私は個別に変換をいくつか試したが、結局時間だけが無駄になり、すべての(あるいはほとんどの)データに機能する変換にたどり着いたのだった。
以下が私がやったことだ。自己責任で使ってくれ。(参考までに、これはvbulletinのときの話だ)。
def char_map(raw_original)
raw = raw_original.dup
debug = false # (raw.length > 50)
# windows 1252
all = ''
win_encoded = ''
### WIN1252 エンコーディング
win_encoded = ''
begin
win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
invalid: :replace, undef: :replace, replace: ""
).force_encoding('utf-8').scrub
rescue => e
puts "\n#{'-'*50}\nWin1252 でエラーが発生しました\n\n#{raw}\n\n"
win_encoded = ''
end
### ISO 8859 エンコーディング
iso_encoded = ''
if all.length == 0 && win_encoded.length > 0 && win_encoded != raw
all = (debug ? "Win1252--" : '') + win_encoded
else
all = raw
end
all = old_char_map(all)
all
end
そのコードはインポートスクリプト内で使われるのか、それともサーバー/データベース側で使われるのでしょうか?
pfaffman
(Jay Pfaffman)
2021 年 11 月 4 日午後 3:01
9
インポートスクリプト内です。データベースいじりは好きではありません。
どこかで raw に対してこの関数を呼び出して raw(おそらくタイトルも)を修正しています。
はい、ありがとうございます!これでこのデバッグに大きく先行できます。
「いいね!」 1
ファイルを読み込む際に encode"UTF-8" のようなコマンドを追加して UTF-8 としてエンコードすることで、この問題を解決しました。これは vanilla.rb のインポートスクリプトの 76〜80 行目に記述されています。
コマンドラインで実行した担当者から正確な構文の確認が取れ次第、更新します。
「いいね!」 1
これを修正するために彼が使用したものは、バニラの76行目から始まります。
def read_file
puts "reading file..."
string = [File.read](http://file.read/)(@vanilla_file)
.force_encoding('UTF-8').encode("UTF-8").gsub("\\N", "")
.force_encoding('UTF-8').encode("UTF-8").gsub(/\\$\\n/m, "\\n")
.force_encoding('UTF-8').encode("UTF-8").gsub("\\,", ",")
.force_encoding('UTF-8').encode("UTF-8").gsub(/(?<!\\)\\"/, '""')
.force_encoding('UTF-8').encode("UTF-8").gsub(/\\\\\\"/, '\\\"\"')
[StringIO.new](http://stringio.new/)(string)
end
「いいね!」 1
Canapin
(Coin-coin le Canapin)
このトピックを分割しました:
2023 年 10 月 17 日午前 9:52
13
pfaffman
(Jay Pfaffman)
2023 年 10 月 17 日午後 2:05
16
エンコーディングについてGoogleで調べ、壊れたエンコーディングを修正する方法を見つける必要があります。
southpaw
(Southpaw)
2023 年 10 月 17 日午後 3:02
17
Hi @ddeveloper 、
私も数ヶ月前に(開発者ではありませんが )このプロセスを経験し、セルフホストのVanillaフォーラムからセルフホストのDiscourseへの移行を成功させることができました。私にとって重要だったのは、Vanilla Porterでデータエクスポートを行う際に、最初のドロップダウンメニューで「Vanilla 2」を Source Forum Type として選択することでした。
Migrate a Vanilla forum to Discourse でリンクされている2.5バージョンではなく、Vanilla Porter 2.6 RC1 — Vanilla Forums でダウンロード可能なVanilla Porter 2.6バージョンを使用しました。
記憶が正しければ、新しいVanilla Porterスクリプトと「Vanilla 2」フォーラムタイプを使用した際に、UTF-8エラーは再度発生しませんでした。
もしこれらの2つの提案でインポートに違いが見られない場合は、これまでに実行した手順と、具体的に何が表示されているかについて、いくつか詳細を教えていただけますでしょうか。トラブルシューティングにおいて、「同じエラー」でもわずかな違いが大きな違いを生むことがあります。
「いいね!」 5
ガイドに従いましたが、ポーターのバージョンは 2.6 を使用しました。バージョン 2.6 からエクスポート ファイルをエクスポートし、ここに更新します。
ポーター 2.6を試しましたが、同じUTF-8エラーが発生しました。
これまでのところ、このガイドに従っています: Migrate a Vanilla forum to Discourse
UTF-8エンコーディングエラーまで、すべて順調に進みました。この問題を解決した人もいます。それらを試しましたが、私にはうまくいきませんでした。
@Nick_Chomey さんの上記の解決策を試しました。txtファイルを読み取る際にutf-8エンコーディングを強制しようとしましたが、残念ながらうまくいきませんでした。
southpaw
(Southpaw)
2023 年 10 月 17 日午後 5:55
20
念のため、Vanilla PorterのドロップダウンメニューでどのSource Forum Typeを選択しましたか?
お使いのコンピューターの種類を教えていただけますか?ファイルをUTF-8エンコーディングに変換する手順は、コンピューターによって異なります。
「いいね!」 1
ご協力いただきありがとうございます。
Source Forum Type で「Vanilla 2」を選択しました。
Windows および Linux デバイスの両方を使用でき、両方にアクセスできます。