[ 新規に投稿する ]

エンコードのエラー回避方法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でUnicode文字に換算して、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 [ コメントを投稿する ]
  >推測された通りです。
>任意の文字数となる部分なので、上手くいっている部分と、どうではない部分がありました。
>
>ご教示いただいた方法を試してみます。

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

[ 新規に投稿する ]