1

pdftkを使用してpdfファイルからタイトルを解析しています。さまざまな言語固有の文字が含まれています。

私がこれを行う必要があるこのrubyonrailsアプリケーションは、ruby1.8.7とrails2.3.14を使用しているため、ruby1.9に組み込まれているエンコーディングソリューションは現在のところオプションではありません。

私がする必要があることの例:

タイトルにüが含まれている場合、pdftk(コマンドラインまたはruby pdf-toolkit gemのいずれか)を使用してpdfコンテンツを読み取ると、「ü」は次のように変換されます。ü

私のアプリケーションでは、これがWebページやXMLファイルでのニーズにうまく機能しているように見えるので、これが本当に必要です。

ルビーで明示的に文字を変換することができます

>> string = "ü"
=> "ü"
>> string.gsub("ü","ü")
=> "ü"

しかし、明らかに私はこれを一つずつやりたくありません。

Iconvを使用してこれを実行しようとしましたが、これをレンダリングされた文字に変換するために何を指定すればよいかわからないと感じています。たぶんこれはutf-8だと思いましたが、レンダリングされた文字に変換されていないようです

>> Iconv.iconv("latin1", "utf-8","ü").join
=> "ü"

レンダリングされた文字の最終結果を取得するために、ここでどの形式を使用するか、またはどの形式を使用するかについて、私は少し混乱しています。

では、Iconvまたは他のツールを使用して、pdftkからこのHTMLコードに変換されたすべての文字に対してこの変換を行うにはどうすればよいでしょうか。

または、最初にpdfファイルを読んだときにこれを行うようにpdftkに指示する方法!

4

2 に答える 2

1

わかりました-ここでの問題は、pdftkが返すコードがHTMLであるため、最初にHTMLのエスケープを解除することが機能するパスだと思います

>> Iconv.iconv("utf8", "latin1", CGI.unescapeHTML(string) ).join
=> "ü"

アップデート:

以下を使用して

  pdf = PDF::Toolkit.open(file)
  pdf.title = Iconv.iconv("utf8", "latin1", CGI.unescapeHTML(pdf.title)).join

これはほとんどの言語で機能するように見えますが、これを日本語と中国語に適用すると、物事が台無しになり、PDF に表示される元の文字にはなりません。

アップデート:

近づきます - 日本語と中国語のタイトルに pdftk が挿入する html コードは、エスケープを解除して Iconv 変換を試みない限り、既に正しくレンダリングされているようです。

CGI.unescapeHTML(pdf.title)

これは正しくレンダリングされます。

それで...他の言語に必要な変換を適用する前に、pdf.titleをテストして、これが中国語か日本語か(2バイト?)を事前に確認するにはどうすればよいですか?

于 2012-05-17T14:28:33.857 に答える
0

多分次のようなものです:

string.gsub(/&#\d+;/){|x| x[/\d+/].to_i.chr}
于 2012-05-17T13:46:37.867 に答える