UTF-8以外のテキストファイルを読み込むには
2 posters
UTF-8以外のテキストファイルを読み込むには
お騒がせ,すみません。
v16でUTF-8以外のテキストファイルを読み込むには,どうすれば良いでしょうか。
$DocPos:=Select document("Documents";"TEXT";"選択して下さい";Alias selection)
$text:=Document to text($DocPos)
CONVERT FROM TEXT($text;"UTF-8";$convertedBLOB)
$text:=BLOB to text($convertedBLOB;UTF8 C string)
としても変換してくれません。ちなみにこれではUTF-8でも化けたままで,2行目を
$text:=Document to text($DocPos;"UTF-8")
とすると化けない状態でテキストを作ります。
v16でUTF-8以外のテキストファイルを読み込むには,どうすれば良いでしょうか。
$DocPos:=Select document("Documents";"TEXT";"選択して下さい";Alias selection)
$text:=Document to text($DocPos)
CONVERT FROM TEXT($text;"UTF-8";$convertedBLOB)
$text:=BLOB to text($convertedBLOB;UTF8 C string)
としても変換してくれません。ちなみにこれではUTF-8でも化けたままで,2行目を
$text:=Document to text($DocPos;"UTF-8")
とすると化けない状態でテキストを作ります。
M_Fujihara- 投稿数 : 80
登録日 : 2016/12/03
Re: UTF-8以外のテキストファイルを読み込むには
UTF-8以外のテキストファイルをテキストに読むのであれば,
$fileName:=Select document(System folder(Documents folder);"txt";"選んでね";Package open)
If (OK=1)
$text:=Document to text(DOCUMENT;"windows-31j")
End if
みたいな感じになります。
ポイント
①Select documentの戻り値は,ファイル名(1個目)です。DocRefではありません。
また,ファイルタイプ惜別子(TEXTなど)は,旧MacOSの仕様ですので,UTIまたはファイル拡張子を指定したほうが無難です。
http://doc.4d.com/4Dv16/4D/16/Select-document.301-3036725.ja.html
②Document to textの第1引数はフルパスまたはストラクチャに隣接するファイル名です。Select documentの戻り値は渡せません。
http://doc.4d.com/4Dv16/4D/16/Document-to-text.301-3036713.ja.html
③Document to textはそれ自体が文字コード/改行コード変換の役割を担っています。BLOBを経由する必要はありません。
ちなみに,これはOKを更新せず,ON ERROR CALLの対象でもない,珍しいコマンドです。
④文字コード名は正確に指定する必要があります。
4Dは,Shift_JISだけでなく,Windows-31J(MicrosoftのJIS),X-Mac-Japanese(AppleのJIS)にも対応しています。
Shift_JISと指定した場合,機種に依存するNEC/IBM/MS/Apple拡張文字が"?"になるかもしれません。
文字コードを指定しなかった場合,BOM(バイトオーダーマーク)があれば,UTF-8,そうでなければANSI(環境の非Unicode文字コード。4Dの場合,v2004まで使用されていたWin/Mac可逆性を重視した特殊な変換テーブル)という判断になります。
https://ja.wikipedia.org/wiki/バイトオーダーマーク
https://ja.wikipedia.org/wiki/波ダッシュ
なお,
$text:=Document to text($DocPos;"UTF-8")
はUTF-8のドキュメントをテキストに読み込む,という意味ですから,これで化けないのであれば,そのドキュメントはUTF-8だということになります。
もっとも,前述したように,第1引数にSelect documentの戻り値(フルパスではない)は渡せませんから,読み込まれているのは選択したファイルではないかもしれません。
$fileName:=Select document(System folder(Documents folder);"txt";"選んでね";Package open)
If (OK=1)
$text:=Document to text(DOCUMENT;"windows-31j")
End if
みたいな感じになります。
ポイント
①Select documentの戻り値は,ファイル名(1個目)です。DocRefではありません。
また,ファイルタイプ惜別子(TEXTなど)は,旧MacOSの仕様ですので,UTIまたはファイル拡張子を指定したほうが無難です。
http://doc.4d.com/4Dv16/4D/16/Select-document.301-3036725.ja.html
②Document to textの第1引数はフルパスまたはストラクチャに隣接するファイル名です。Select documentの戻り値は渡せません。
http://doc.4d.com/4Dv16/4D/16/Document-to-text.301-3036713.ja.html
③Document to textはそれ自体が文字コード/改行コード変換の役割を担っています。BLOBを経由する必要はありません。
ちなみに,これはOKを更新せず,ON ERROR CALLの対象でもない,珍しいコマンドです。
④文字コード名は正確に指定する必要があります。
4Dは,Shift_JISだけでなく,Windows-31J(MicrosoftのJIS),X-Mac-Japanese(AppleのJIS)にも対応しています。
Shift_JISと指定した場合,機種に依存するNEC/IBM/MS/Apple拡張文字が"?"になるかもしれません。
文字コードを指定しなかった場合,BOM(バイトオーダーマーク)があれば,UTF-8,そうでなければANSI(環境の非Unicode文字コード。4Dの場合,v2004まで使用されていたWin/Mac可逆性を重視した特殊な変換テーブル)という判断になります。
https://ja.wikipedia.org/wiki/バイトオーダーマーク
https://ja.wikipedia.org/wiki/波ダッシュ
なお,
$text:=Document to text($DocPos;"UTF-8")
はUTF-8のドキュメントをテキストに読み込む,という意味ですから,これで化けないのであれば,そのドキュメントはUTF-8だということになります。
もっとも,前述したように,第1引数にSelect documentの戻り値(フルパスではない)は渡せませんから,読み込まれているのは選択したファイルではないかもしれません。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: UTF-8以外のテキストファイルを読み込むには
遅くなりましたが,ありがとうございました。
Document to textは読み込む前に,文字化けがないか確認するのに有用ですね。
外部からのファイル読み込み,書き出しには,USE CHARACTER SETを付け加えました。
Document to textは読み込む前に,文字化けがないか確認するのに有用ですね。
外部からのファイル読み込み,書き出しには,USE CHARACTER SETを付け加えました。
M_Fujihara- 投稿数 : 80
登録日 : 2016/12/03
Permissions in this forum:
返信投稿: 不可
|
|