あなたの映画力を試せる!POPLETA映画検定(無料) >>

PERLのCGIで「撮影」文字が「暫影」と文字化けしてしまいます。
これを回避するにはどうすれば良いでしょうか?

CGIスクリプトはSHIFT_JISで作成してます。
Perlのバージョン 5.008007
OS:linux
use Encode; (Ver. 2.88)が使えます
use utf8; (Ver. 1.05)が使えます

A 回答 (5件)

Shift_JISの2バイト目が42から62になっているので小文字変換処理が誤って行われたように見えます。

    • good
    • 0

まじめな話として


5.8.7 はいくらなんでも古すぎる
と思うの.
    • good
    • 0

文字コード違いにしては、文字化けが大人しすぎます。


おそらく、「撮」を「(日本語の)一文字」ではなく「(1バイト文字が)2文字」と見做して、そのうちの1バイトだけを変換したように見えます。
所謂「だめ文字」と同じ根の問題です。

5.8.7だと
○use utf8;して、スクリプトもUTF-8で書く。
○外部の文字(通信で受けとったものとか、ファイルの中のものとか)は decodeして utf8フラグ付き文字列にする
○ utf8フラグ付き文字列で変換等を行う。(漢字は「1文字」扱いされる)
○外部に書き出す際には encodeする。
で大抵は解決できると思います。
    • good
    • 0

プログラム内で実際に主力している文字コード(またはHTMLファイル内にハードコーディングされている文字ならHTMLファイルの生成環境の既定の文字コード)とHTMLヘッダーで指定している文字コードが異なっているのでしょう。


その辺をご確認ください。

Googleなどで「Perl CGI 文字化け」といった簡単なキーワードで検索すると解決策を説明したページがたくさん見つかるかと思います。
参考まで。
    • good
    • 0

ブラウザ上で文字化けということですか。


apacheの文字コードとかhtmlの文字コードとかと、cgiから出力する文字コードがあってますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qjavaが文字コードの影響でコンパイルが通りません。

java jdk-12 , windows10 , Tera Pad でコンパイルしようとしていますが、

 1つ目、

  エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

のエラーが出てコンパイルが通りません。 

ネットで調べて -encoding UTF-8 を追加してコンパイルしたら通ったのですが、次に

 2つ目、

  エラー: '\ufeff'は不正な文字です

というエラーが出ます。

UTF-8のBOMが原因のようですが、ネットで調べた方法をいくつか試してみても

コンパイルが通りません。

どのようにしたらよいでしょうか?


試した方法: UTF-8N にする , 一度Shift-Jisに変換してみる
$ nkf --overwrite --oc=UTF-8 ($は内部コマンドまたは...認識されませんと出ます)
ネット上のBOMをスキップする方法というソース

java jdk-12 , windows10 , Tera Pad でコンパイルしようとしていますが、

 1つ目、

  エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

のエラーが出てコンパイルが通りません。 

ネットで調べて -encoding UTF-8 を追加してコンパイルしたら通ったのですが、次に

 2つ目、

  エラー: '\ufeff'は不正な文字です

というエラーが出ます。

UTF-8のBOMが原因のようですが、ネットで調べた方法をいくつか試してみても

コンパイルが通りません。

ど...続きを読む

Aベストアンサー

>エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

日本語環境のWindowsで、普通に起動したコマンドプロンプトはShiftJISなんじゃないですかね?
https://qiita.com/user0/items/a9116acc7bd7b70ecfb0

TeraPadで保存時の文字コードをShiftJISにしたらどうなるでしょう?

とは言え…JavaならUTF-8とかでしょうかねぇ。
先程掲示したURLの方法でコードページをUTF-8にしてみてはどうでしょうか。

>$ nkf --overwrite --oc=UTF-8 ($は内部コマンドまたは...認識されませんと出ます)

Windowsには標準でnkfは入っていないと思いますけど、そこのところどうなんです?
vectorとかからDLして入れたんですか?
そして…コマンド入力時にプロンプトは入力しませんよ?
# Linuxとかのシェルのプロンプトだと思いますが…。

QVisual Studio 2019、 Visual basic コンソールに出力されない

Visual Studio 2019でVisual Basicを学び始めたばかりの者です。
例えば下記スクリプトを実行させると、Textbox1には出力されますが
下図の通り「出力」には何も表示されません。
何か誤りや設定違いが有るのでしょうか。
(2週間前には「出力」にも表示されていた気がします。)
よろしくお願いいたします。

Public Class Form1
Dim Cpos As Point
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Cpos = PointToClient(Cursor.Position)
TextBox1.AppendText(Cpos.X & " " & Cpos.Y & vbCrLf)
Console.WriteLine(Cpos.X & " " & Cpos.Y)
End Sub

End Class

Visual Studio 2019でVisual Basicを学び始めたばかりの者です。
例えば下記スクリプトを実行させると、Textbox1には出力されますが
下図の通り「出力」には何も表示されません。
何か誤りや設定違いが有るのでしょうか。
(2週間前には「出力」にも表示されていた気がします。)
よろしくお願いいたします。

Public Class Form1
Dim Cpos As Point
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Cpos = PointToClient(Cursor.Position)
T...続きを読む

Aベストアンサー

Uninstall/reinstallしても設定は初期化されないです。
メニューのTools -> Import/Export Settingsで、Reset all setting(すべての設定の初期化)をするのです。

Q現在プログラミングの研修中なのですが、ピラミッドのなどの図形を表示するプログラムが難しすぎます。 ピ

現在プログラミングの研修中なのですが、ピラミッドのなどの図形を表示するプログラムが難しすぎます。

ピラミッドはなんとかできるのですが、それを応用したひし形や真ん中を切り抜いたものなど、、

無理やりやれば表示することはできます。

このようなことはどのように勉強すればいいのでしょうか?

よろしくお願いします。

Aベストアンサー

アルゴリズム。。。
つまりは「入力されたデータをどのように処理したら求める結果を出すことが出来るか」考えることを学ぶと。

これはプログラム記述言語を使って考えるのではなく、その人が日常使っている自然言語(多くの日本人の場合は日本語)で考えます。
箇条書きでもよいし、何らかのチャート図を知っていたらそれを使って考えをまとめてゆくのでもよいでしょう。

https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0

参考まで。

Qpythonのデータ型に組み込み型があると思いますが、なぜ組み込み型と呼ぶのでしょう? なにが何に組

pythonのデータ型に組み込み型があると思いますが、なぜ組み込み型と呼ぶのでしょう?
なにが何に組み込まれているのでしょう?
オブジェクトにデータ型が組み込まれているという意味でしょうか?

Aベストアンサー

型が言語に組み込まれている。
https://docs.python.org/ja/3/library/stdtypes.html

クラス型なんかは組み込み型や他のクラス型の組合せでPythonプログラム上で定義できるけど、組み込み型が何もなかったらクラス型の定義もできないですから。

QC#について質問【複数の.datファイルからデータを取得後csvファイルでリストを作成】

いつもお世話になります。
複数の.datファイル(カンマ区切りの4~5列、約800行程度)
ProcessData,LOT_ID,3,AP0076686.00C,
ProcessData,LOT_ID_SUB,3,AP0076686.00,
ProcessData,LOT_NO,3,AP0076686,
ProcessData,WAFER_ID,3,AP0076686.19,
ProcessData,WAFER_NO,1,19,
ProcessData,PRODSPEC_ID,3,T5DH20001-00001.00,
ProcessData,PRODGRP_ID,3,T5DH2,
ProcessData,PRODGRP_BIND,3,T5DH2,
ProcessData,MAIN_MAINPD_ID,3,A6L511NY.00,
ProcessData,MAINPD_ID,3,A6L511NY.00,
ProcessData,FLOW_TYPE,3,Main,
ProcessData,FLOW_TYPE_NO,1,1,
ProcessData,D_SEQNO,1,169,
ProcessData,OP_NO,3,PNH PEP.MA1,
ProcessData,OP_NO_NAME,3,本処理,
ProcessData,PD_IDENT,3,PPNHIMA1.00,
ProcessData,PD_IDENT_NAME,3,PEP,
ProcessData,EQP_GROUP_CODE,3,PKRF,
ProcessData,EQP_GROUP_NAME,3,KrF SCANNER(SK3000 + ES5),
ProcessData,EQP_GROUP_BIND,3,PKRF,
ProcessData,EQP_ID,3,PKRF004,
ProcessData,PH_RECIPE_ID,3,PES5MIX,
ProcessData,RCP_NAME_SPACE,3,PEPMA,
ProcessData,LC_RECIPE_ID,3,PKRF.01,
ProcessData,RECIPE_ID,3,PEPMA.PES5MIX,
ProcessData,S_DATE,4,2019/01/24 12:47:09,
ProcessData,E_DATE,4,2019/01/24 12:47:51,
ProcessData,CAST_ID,3,PA0-00349,
ProcessData,SLOT_NO,1,19,

の中からSplitを用いて string[]dataTemp = fileData.Split(',');で
(ProcessData[0],EQP_ID[1],3[2],PKRF004[3],)のように配列に格納して
ifを使ってdataTemp[1] == "EQP_ID"の時にdataTemp[3](PKRF004)を
    dataTemp[1] == "LOT_ID"の時にdataTemp[3] (AP0076686.00C)を
    dataTemp[1] == "WAFER_ID"の時にdataTemp[3] (AP0076686.19)を
dataTemp[1] == "S_DATE"の時にdataTemp[3](2019/01/24 12:47:09)を
新たにCSVファイルを作成して上記のデータを入力したリストを作りたいのですが、C#初心者で
色々と試行錯誤しましたが知識が足りないようです。。。。


リストについてはヘッダーなどは必要ありません。.datが大量にあるので一列にEQP_ID、LOT_ID、WAFER_ID、S_DATEが並んだ状態で何100行とある状態リストを作成したいです。

詳しい方ご教授をお願いいたします。

いつもお世話になります。
複数の.datファイル(カンマ区切りの4~5列、約800行程度)
ProcessData,LOT_ID,3,AP0076686.00C,
ProcessData,LOT_ID_SUB,3,AP0076686.00,
ProcessData,LOT_NO,3,AP0076686,
ProcessData,WAFER_ID,3,AP0076686.19,
ProcessData,WAFER_NO,1,19,
ProcessData,PRODSPEC_ID,3,T5DH20001-00001.00,
ProcessData,PRODGRP_ID,3,T5DH2,
ProcessData,PRODGRP_BIND,3,T5DH2,
ProcessData,MAIN_MAINPD_ID,3,A6L511NY.00,
ProcessData,MAINPD_ID,3,A6L511NY.00,
ProcessData,FLOW_TYP...続きを読む

Aベストアンサー

質問内容が多岐に渡ってきているため、どこまで出来て、どこが出来ないのか、を整理して、
改めて質問を行うことをお勧めします。

今できないのは、元の質問内容ではなく、それぞれのロジックの書き方を理解していませんよね。
C#の文法。
対象ディレクトリ内のファイルの一覧を得るにはどうすればいいのか。
ファイルの読み込み、書き出しをするにはどうすればいいのか。
繰り返し処理するにはどうすればいいのか。
など。

最終目的を質問しても、誰も正解は教えてくれませんし、ネットには正解は転がっていません。
知識、情報を組み合わせて正解を作り上げるので。

そのため、実現するためのプロセスを細分化し、プロセス単位に方法論をネットで調べるとか、質問するとかになると思います。

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

QPerlで、「が」を、「が」に戻す方法

Perlで作ったcgiで、ブラウザから文字入力してデータ保存するcgiがあるのですが、データの「が」が、「が」のように保存されてしまうケースがあります。
おそらく「か」+「濁点の゛」の2つに分かれてしまったのだと思います。
データは、EUC-JPでテキストで保存されています。

このデータ「が」を、「が」に戻す方法を教えてください。

Aベストアンサー

力ずくだけど s/// で変換する.

Qプログラムの在宅請負業務ができるようになるまで、どのくらいの期間?

プログラミングの初歩的な事も分からず、プログラミングが全く未経験の人間が、これからプログラムを独学で学んで、プログラムの在宅請負業務ができるようになるまで、どのくらいの期間が掛かると思いますか?

Aベストアンサー

プログラミングが全く未経験の人間が独学で学んだとして、それなりにプログラムができるようになるまで10年くらいでしょうか?それから在宅請負業務ができるまで、さらに5~10年くらいかなあ?

実際問題として、独学で学んだ開発実績ゼロなプログラマに、会社は仕事の依頼はしないでしょう。

QC++を本で独学してますが、配列とポインタでわからないところがあります。

現在C++を本で独学しており、ポインタの章を終えて配列の章を
学んでいるのですがでわからないところがあります。

『配列名は配列の先頭要素のアドレスをあらわす。』と習ったのですが、
下記のコードにての

#include <iostream>
using namespace std;

int main()
{
char str[] = "Hello";
cout << str << '/\';
return 0;
}

を実行すると"Hello"が出力されるとのことですが、
どうしてchar型配列strの要素をそのまま出力することになるのでしょうか?
この場合、『配列名は配列の先頭要素のアドレスをあらわす。』に
のっとれば出力されるのは「char型配列strの先頭要素のアドレス」に
なり、アドレスが出力されなければおかしいと思うのですが・・・?

同様に

#include <iostream>
using namespace std;

int main()
{
char* char = "Hello";
cout << str << '/\';
return 0;
}

のコードでもどうして間接参照演算子*さえ使わずに
strの要素を出力できるのかがさっぱりわかりません。

ご説明頂ければ幸いです。

現在C++を本で独学しており、ポインタの章を終えて配列の章を
学んでいるのですがでわからないところがあります。

『配列名は配列の先頭要素のアドレスをあらわす。』と習ったのですが、
下記のコードにての

#include <iostream>
using namespace std;

int main()
{
char str[] = "Hello";
cout << str << '/\';
return 0;
}

を実行すると"Hello"が出力されるとのことですが、
どうしてchar型配列strの要素をそのまま出力することになるのでしょうか?
この場合、『配列名は配列の先頭要素...続きを読む

Aベストアンサー

cout の << は。その後の型によって何を表示するかが変わります。
このような仕組をポリモーフィズムと言って、C++の重要な仕組の一つです。


他のポインタだと、そのアドレスを出力する、となっています。
対して、 char * だと「その示すアドレスから順番に、'\0'の前までの『文字』を出力する」となっています。

これは、以下のような理由があります。
・C++の元になったC言語では、「文字列型」というものが無く、「charの配列の先頭から'\0'の前までを文字列として扱う」というルールを使っている。
C++でも、そのルールを引き継いで、char * / char[] を文字列として扱うケースが多い。
・cout << にchar * を指定したとき、圧倒的に「文字列を出力したい」ケースが多い


アドレスを出力させたいのなら、char *でないポインタにキャストすることです。
そういう時は、汎用につかえる void * にキャストするのが常套手段です。

C言語由来の記法では (void * ) str と、(型)とします。
ですが、このキャストはなんでも有りすぎるので、C++ではC++専用のキャスト方法が用意されているので、そちらを使いましょう。
static_cast<void *>(str)

cout の << は。その後の型によって何を表示するかが変わります。
このような仕組をポリモーフィズムと言って、C++の重要な仕組の一つです。


他のポインタだと、そのアドレスを出力する、となっています。
対して、 char * だと「その示すアドレスから順番に、'\0'の前までの『文字』を出力する」となっています。

これは、以下のような理由があります。
・C++の元になったC言語では、「文字列型」というものが無く、「charの配列の先頭から'\0'の前までを文字列として扱う」というルールを使っている。
C++で...続きを読む

Qpythonの正規表現

import re

class_name = "ValueFunctionTrainer"
の時、
snaked = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", class_name) #①
print(snaked ) #Value_FunctionTrainer
snaked = re.sub("([a-z0-9])([A-Z])", r"\1_\2", snaked) #②
print(snaked ) #Value_Function_Trainer

と表示されるようですが、①と②の正規表現の意味を教えてください。

Aベストアンサー

1
任意の1文字(これが\1)の後ろに、「英大文字1文字が続きその次に英小文字が1文字以上続く」(これが\2)

2
英小文字か数字が1文字(これが\1)、その後ろに、英大文字が1文字(これが\2)続く


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング