お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-03-10 10:45:55

youre
メンバ
登録日: 2006-11-07

UTF-8の文字列を"\U+????"形式にしたいのです.

QCAD2( 2.0.5.0 [Community Edition] )を使用したいのですが,
Windows版の 古い AutoCAD LT2000 の, DXF図面データを, そのまま利用することが出来ません.

線画は大丈夫そうなのですが, 入力された日本語の表示が上手く出来ません.
図面データの元は, Windows用なので 日本語文字コードがShift-JISです.

DXFは中身がテキスト(アスキーコードと日本語文字以外は使われて無い)ので,
nkf (Network Kanji Filter Version 2.0.7 (2006-06-13)/Ubuntu 6.10です.)を使って

    nkf -S -w xxxxx.dxf > yyyyy.dxf

として,Shift-JISの日本語をUTF-8へ変換しています.
GEditで変換後のDXF図面ファイルを開いて確認すると, ちゃんとUTF-8へ変換されています.
変換後のDXF図面ファイルをQCADへ読み込むと,なぜか文字化けして読めません.


そこで,例にQCAD側で日本語を入力して, DXF(AutoCAD 2000形式とAutoCAD R12形式)で,
出力したところ,こちらでは,

\U+3042\U+3044\U+3046\U+3048\U+304a\P\U+304b\U+304d\U+304f\U+3051\U+3053\P

という16進数の文字列で文字を表現する形式になっている様です.
(上記で入力した文字列は,UTF-8で "あいうえお[改行]かきくけこ[改行]" となっています.)

    AutoCAD 2000/LT2000
        Shift-JIS 日本語文字列
       ↓
       ↓(1) nkf で, Shift-JISから UTF-8へ変換
       ↓
       ↓(2) "なにか" で,UTF-8日本語文字列をUTF-8の16進数文字列("\U+????" 形式)へ変換
       ↓
    QCAD2
        "\U+????"
       (↑この表現形式のことは何と呼べばいいんでしょうか?
        "コードポイント"は文字を表す16進コードそのものみたいですし…)

こんな感じに変換する必要があります.

この (2) "なにか" の用途で使える既存のソフトが無いでしょうか?
もちろん(1)の機能も含まれていたら, もっと助かります.

よろしくお願いします.

(無ければ自分で作る必要があるということでしょうね(笑))

オフライン

 

#2 2008-03-10 11:24:08

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-10 11:37:12)

オフライン

 

#3 2008-03-10 11:45:00

youre
メンバ
登録日: 2006-11-07

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

CMasami さん, はじめまして.

情報ありがとうございます.
AutoCADって, なかなかおもしろい使い方が出来るのですね.

AutoCADで作られたDXF図面のヘッダ部分から,
該当しそうな部分を抜き出すと,こんな感じです.
<----->
  0

SECTION

  2

HEADER

  9

$ACADVER

  1

AC1009

  9

$INSBASE

<----->
バージョンが古いみたいですね.

AutoCADを使うことが出来ないので,別な方法を検討したいと思います.


手元のUbuntuリポジトリのQCADは,CIFしか使えないみたいです.

日本語表示の方法が,ほかのアプリケーションと違っているみたいで,
文字データを使って,QCADのfontsホルダにある,"unicode.cxf"ファイル内の
UTF-8文字データを検索し,対応する線画データで置き換えて表示している
みたいなのです.

QCAD開発元さんが工作機械メーカーさんで,
文字を工作機械で処理するのに線画であった方が楽ってこともあるのかも
知れません.

図面を作っているトコで日本語の形式が変更出来れば良いのですが,
できるかぎり, Ubuntuの上で変換処理が出来る方法があればと思っています.

最後の編集者: youre (2008-03-10 14:45:29)

オフライン

 

#4 2008-03-11 03:21:04

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-11 03:48:23)

オフライン

 

#5 2008-03-11 13:19:07

youre
メンバ
登録日: 2006-11-07

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

CMasami さん, こんにちは.

わざわざすみません.
フィルタ作成までして頂いて,恐縮です.

こちらでも同様の機能があるソフトが無いか調べているのですが,
漫然とWeb検索を繰り返していても見付からないみたいです.


対策として, PHPを使って
UTF-8の文字列を, HEX文字列に変換して, 頭に"\U+"を付けようと
考えているところです. bin2hex() という組込み関数が使えそうです.
(PHPを選んだのは, 現在進行形で学んでいるところだからです.(笑))

需要はありそうなのに,だれも手がけていない風なのは,もしかしたら
標準コマンドの組合せで実現できるからなのかもしれません.

調べていて判ったことと言えば…
Shift-JIS → UTF-8 の変換は, 先に挙げている, nkf の他に, iconv
と,いうものがありました.

Perlのライブラリなら, jcode.pl が定番の様子.
PHPでは, mbstring を使う様です.


Windows用は今のところ見付けられていません. このあとVector辺りで
探してみたいと思います.

今回変換先データの, "\U+????"形式のことを調べて行くと,
"Unicode HomePage" にある
"Unihan Database" ( http://www.unicode.org/charts/unihan.html )
(検索には, UTF-16の数値を入力しないといけないらしいです.)
では, "????"の16進数の並びを "Encoding Forms" と呼んでいるみたいです.
このキーワードで, 再度Web検索を掛けてみたいと思います.

オフライン

 

#6 2008-03-11 15:10:45

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

オフライン

 

#7 2008-03-11 18:01:49

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

ワイド文字を、\U+XXXXに変換する C サンプルコードです。
Fedora8 x86_64 gcc4.1.2 環境でしか確認してません。

コード:

/*  Wide Char -> Hex(\\U+xxxx)変換プログラム */
#include <wchar.h>  // ワイド文字を扱うためのヘッダー
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void) {
  wchar_t wbuf[1024]; // リードバッファ
  wchar_t *ws;            // ワイド文字列ポインタ
  unsigned int code;    // HEX変換用
  setlocale(LC_ALL, "");
  while (fgetws(wbuf,1024,stdin)){  // 標準入力から読む
    for ( ws = wbuf; *ws ; ws++) {
      code = (unsigned int)*ws;
      if (code > 255)                         // マルチバイト文字列なら変換
        printf("\\U+%X",code);
      else
        fputc(code,stdout);
    }
  }
}

$ echo あいうえお|./a.out
\U+3042\U+3044\U+3046\U+3048\U+304A

オフライン

 

#8 2008-03-11 19:49:16

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-11 23:50:42)

オフライン

 

#9 2008-03-11 23:05:12

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-12 13:24:22)

オフライン

 

#10 2008-03-11 23:55:25

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-12 10:29:57)

オフライン

 

#11 2008-03-12 09:24:22

youre
メンバ
登録日: 2006-11-07

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

si さん, CMasami さん
おはようございます.

昨日中に,大切なところをすべて解決して頂いた様で恐縮です.
ありがとうございます. 早速試してみたいと思います.


わたしの方は,
CMasami さんの御指摘にあった通り,UTF-8と勘違いしてたので,
ちょっと難しくなって試行錯誤していたところです.

mbstring の仕様を調べて,コーディングし直している最中です. (もっと勉強しなくては…)
できたらこちらか,サイズが大きいなら別のところへアップして見て頂こうと思います.


JW-CADとも連携できる様になるのですね.
社内にあるWindowsクライアントすべてがCADを使える様になりそうです.

ありがとうございます.

オフライン

 

#12 2008-03-12 09:49:54

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

最後の編集者: CMasami (2008-03-13 00:57:20)

オフライン

 

#13 2008-03-12 13:00:41

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

ある程度進展が見られるようで何よりです。
>CMasamiさん
変換に NKF をお使いの様ですが、変換できない文字があるとのことですが、iconv は試してみましたか?
入出力文字セットが分かっている場合は、iconvは、きめ細かい文字指定できますので変換可能かも知れません。
 使い方: iconv --help
 対応文字セット:iconv -l
(iconvは、標準で入ってます)

オフライン

 

#14 2008-03-12 13:18:36

CMasami
拒否
From: Utsunomiya
登録日: 2007-12-13

Re: UTF-8の文字列を"\U+????"形式にしたいのです.

※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。

オフライン

 

Board footer

Powered by FluxBB