ponke_
@ponke_

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ruby-graphvizの画像で日本語のみが文字化けする問題

ご閲覧いただき、ありがとうございます。

様々なサイトを見て試しましたが、解決の糸口を見つけられず、どうしてもgraphvizの日本語の文字化けが解消されなかったので質問しました。

解消したいこと

ruby-graphvizを使った画像生成ににおいて、日本語のみが文字化けしてしまう問題を解決したいです。英語は文字化けしません。

日本語が一文字ずつが、以下のように文字化けします。
65
BD

これらを、ひとまとまりで、□で囲まれています。

試したこと

  • nodeやedgeのフォント指定する

【結果】半角英字のみフォントが適応されるが、日本語は文字化け。
(例:「Amazonで買う」というテキストのうち、amazonの部分だけがフォント適応される。)

ソースコード

アクションでgenerate_graphを定義し、ブラウザにアクセスしたときに画像を表示しています。

require "ruby-graphviz"

  def generate_graph
    @problem = Idea.includes([:children]).first
    return unless @problem

    g = GraphViz.new(:G, type: :digraph, fontname: 'MEIRYO')
    g.node[:fontname] = "MEIRYO"
    g.edge[:fontname] = "MEIRYO"

    # 親子関係を示す再帰メソッドを定義
    def add_idea_and_children(graph, idea)
      node = graph.add_nodes(idea.name)
      idea.children.each do |child|
        child_node = add_idea_and_children(graph, child)
        graph.add_edges(node, child_node) if child_node
      end

      node
    end

    add_idea_and_children(g, @problem)

    image_data = g.output(png: String)
    send_data(image_data, type: 'image/png', disposition: 'inline')
  end

バージョンなど

ruby 3.2.2
Rails 7.1.2

使用しているgem
ruby-graphviz

0

1Answer

MEIRYOはインストールしてますか?
Meiryo UIかも?

digraph graph_name {
  graph [
    charset = "UTF-8";
    fontname = "MS Gothic"];
  node [fontname = "MS Gothic"];
  edge [fontname = "MS Gothic"];

dot言語表記なら上記で対処(windows)
rubyを付けず、逆にpython を付けた方がヒットするかも?

 graphviz IPA-Gothic で検索して下さい。

1Like

Comments

  1. @ponke_

    Questioner

    お忙しい中、ご回答本当にありがとうございます。
    早速見直して改善したところ、おかげさまで解決いたしました。

    【解決した方法】
    IPAexフォントをubuntuにダウンロードし、日本語が対応しているフォント(IPAexMincho)で指定することで、無事、画像の文字がが日本語で表せるようになりました。ありがとうございました。

Your answer might help someone💌