エンコードのエラー回避方法No.08939
いちもんじ さん 19/03/26 10:26
 
 カンマで区切られたUnicode(UTF-8)のファイルをファイル名を変えずに
sjisで保存しなおしたファイルがあります。

 何番目かの文字列(70文字程度)を先頭から60文字(半角)で切り取り、
この文字列をダブルクォーテーションで括るとというマクロで編集したファ
イルを開いたときに、

「日本語(Shift-JIS)で読み込み中に変換できなかった文字が1箇所ありました」

という認識エラーが表示されます。

該当箇所をみると閉じる方のダブルクォーテーションが付加されていなく、
「・」の表示でした。

エラーを回避して、(強制的も良いので)ダブルクォーテーションで括った
文字列にする方法があれば、ご教示ください。

[ ]
RE:08939 エンコードのエラー回避方法No.08940
秀丸担当 さん 19/03/28 08:25
 
おそらく、Shift-JISの全角文字の2バイト目に「"」が来てしまっているような状況
かと思います。

テキストを文字列型変数として取り込んで、それをleftstrやmidstrで切り取ってい
るということかと思います。
leftstrやmidstrではバイト数で数えるため、そういうことがありえてしまいます。
例えば以下のようにするとそうなってしまいます。

$a="あいう";
message "\""+leftstr($a,5)+"\"";

これを回避にするには、ちょっとややこしいですが、charindex_to_wideindexでUnic
ode文字に換算して、Unicode版のwcsleftstrやwcsmidstrなどを使う方法があります。

例:
$a="あいう";
message "\""+wcsleftstr($a,charindex_to_wideindex($a,5))+"\"";

あるいは、本文を文字変数に取り込まずに、movetoで移動して直接「"」だけを挿入
するほうが簡単かもしれません。

[ ]
RE:08940 エンコードのエラー回避方法No.08941
いちもんじ さん 19/03/29 13:14
 
>おそらく、Shift-JISの全角文字の2バイト目に「"」が来てしまっているような状
>況かと思います。
>
>テキストを文字列型変数として取り込んで、それをleftstrやmidstrで切り取ってい
>るということかと思います。

推測された通りです。
任意の文字数となる部分なので、上手くいっている部分と、どうではない部分があり
ました。

ご教示いただいた方法を試してみます。

[ ]
RE:08941 エンコードのエラー回避方法No.08945
いちもんじ さん 19/04/01 12:54
 
>推測された通りです。
>任意の文字数となる部分なので、上手くいっている部分と、どうではない部分があ
>りました。
>
>ご教示いただいた方法を試してみます。

ご教示いただいた方法で解決できました。
ありがとうございました。

[ ]