私はperl形式を使ってファイルに行を出力しています。perl形式とutfデータの問題
ieです。
format REPORT1 =
@<<<<<<<< @<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>> @>>>>> @>>>>> @>>>>> @>>>>>
$write_student_number, $write_serial, $write_name, $write_attempted, $write_correct, $write_score, $write_percent_correct, $write_percent_score
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$write_name
-----------------------------------------------------------------------------------------------------------------------------
.
私は、uft8キャラクタ・セットを使用しているOracleデータベースから$ write_nameを取得します。
このデータは、給餌データベースをuft8に変換するまでうまく機能します。私はそれがために使用かわからないんだけど、それは形式が今のようなライン与えUTF 8
ませんでした(< <気づく>>とを@さん)
009999990 000000133 Anderson, Charlie 30 25 25 83.3 83.3
-----------------------------------------------------------------------------------------------------------------------------
009999951 000000132 Smith, Josée 29>> 21 @>>> 21>>> 70.0 @>> 70.0
,
-----------------------------------------------------------------------------------------------------------------------------
009999934 000000131<<Quiring, Randy << [email protected]>>>>> 12 12 @>> 40.0>
の代わりに
009999990 000000133 Anderson, Charlie 30 25 25 83.3 83.3
-----------------------------------------------------------------------------------------------------------------------------
009999951 000000132 Smith, Josée 29 21 21 70.0 70.0
-----------------------------------------------------------------------------------------------------------------------------
009999934 000000131 Quiring, Randy 30 12 12 40.0
私はウェブ上で見つけたさまざまなソリューションを試しましたが、どれもうまくいきませんでした。
binmode STDOUT, ":utf8";
use open qw(:std :encoding(UTF-8));
use Encode;
use Encode 'is_utf8';
$first_name = decode_utf8($first_name);
それだけで?
sのUTF文字を置き換える以外、私はまた、作品のどのソート
use Encode 'from_to';
from_to($write_name, "utf-8", "iso-8859-1");
open my $fh, ">:utf8", $filename
or die "could not open $filename: $!\n";
と
from_to($write_name, "utf-8", "WINDOWS-1252");
を試してみました。
解決策は、文字列をファイルに出力し、その文字列をファイルに読み込んで変数に再度格納することです。
フォーマットはWindows環境で動作します。問題はunixでのみ起こります。
私はあなたに良い解決策があることを望んでいます。
あなたには適用されないことがいくつか掲載されていますが、そこにいくつかの混乱を取り除くことをお勧めします。しかし、私が実際にもっと知りたいのは、データをデータベースに入れているのか、データをどのように取得しているのかということです。これはおそらく問題だからです。 UTF-8は、マルチバイト文字が使用できるバイト列です。何かがマルチバイト部分のエンコーディングをマングリングする必要があります。これは、先頭文字またはマルチバイト文字の後に続くものです。 – zanlok
Oracleから返されたデータのUTF-8フラグがオンになっていますか、またはオフになっていますか?出力ストリームを明示的に 'binmode'しましたか? – tchrist