質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」の警告を解消したいです。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 22K+

culuculu

score 54

現在、Visual Studioで以下のプログラムをビルドしようとしているのですが、
「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」
という警告が出てきており、うまくビルドできません。
他にもLNK2001:「外部シンボル未解決」というエラーもいくつか表示されていますが、まずC4819の警告を解消したいと考えています。

#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"

#define X_SIZE 1920
#define Y_SIZE 1080

using namespace std;
using namespace cv;

cv::Mat img;

int main(int argc, char *argv[])
{
    img = imread("image/face1.jpeg", 1);
    if (img.data == NULL)
        return -1;

    imwrite("image/face1-1.jpeg", img);

    return 0;
}


いくつかのサイトを参考にし、
・プログラム中の日本語コメントがCP932と認識されている原因の可能性があるため、削除する。
・ビルドする際にDebugからReleaseに変更する。
というような対処をしましたが、うまくいきませんでした。(エラーの数は減ったのですが...)

その他のサイトを見ると、LNK(リンカエラー)は対応するライブラリが追加されていないことを示している。
と書かれてありましたが、ライブラリにはスタティックライブラリ、ダイナミックライブラリ、.NETのクラスライブラリの3種類があり、一般的なのがダイナミックライブラリでそれには、
1. ダイナミックリンクライブラリファイル(*.dll)
2. ライブラリファイル(*.lib) 

  1. ヘッダファイル(インクルードファイル)(*.h)
    があることが書かれてありました。(参考url:
    http://imagingsolution.blog107.fc2.com/blog-entry-231.html)
    そのため、インクルードするヘッダーファイルに問題があるのでしょうか?

このエラーや警告の解消を試みている数時間前は「imread,imwriteの識別子が見つかりません。」
というエラーも表示されていました。
もしかしたらimread,imwrite関数を使えるようにするためのヘッダーファイルをインクルードしていない、もしくはヘッダーファイルをビルドしようとしているソースファイルのフォルダ内に入っていない。
という問題があるのかなと考えています。
しかし、どのようなヘッダーファイルを入れればいいのか、どのようにパス指定をすればいいのかわからないため、わかっていただける方にご教授願いたいと思います。
よろしくお願いします。


統合開発環境:Visual Studio Professional 2013
言語:C++
OS:Windows
画像認識のライブラリ:OpenCV(ver3.1.0)
自動化ツール:CMake


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • culuculu

    2016/10/26 14:22

    今後は、エラー対策を行なった上でできなかった場合は、何をどこまでしたかを書いておきます。回答者の立場になって考えていませんでした。

    キャンセル

  • yuki23

    2016/10/26 23:56

    OpenCV についての質問のようですので、使用されている OpenCV のバージョンを記載してください。また、OpenCV のタグを付けることをおすすめします。逆に Windows 10 のタグは無関係と思われます。

    キャンセル

  • culuculu

    2016/10/27 09:23

    OpenCVを使っていたことを記載していませんでした。後、ビルドの自動化ツールであるCMakeも用いています。

    キャンセル

回答 2

checkベストアンサー

+1

こんにちは。

「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」 

この対策はVisual C++ 2010で生じる、warning C4819を退治するが詳しく載ってます。
C4819でググると2番目に出てくるサイトです。Visual Studioの場合は、エラー・コードで検索すると結構ヒントになるサイトがでてきますよ。それでもでてこない時はエラー・メッセージでググると良いです。

LNK2001:「外部シンボル未解決」

これはリンクする時に使った関数等のコードが見つからなかったと言うエラー・メッセージです。
大抵の場合、リンクしなければライブラリの指定漏れです。

もしかしたらimread,imwrite関数を使えるようにするためのヘッダーファイルをインクルードしていない、もしくはヘッダーファイルをビルドしようとしているソースファイルのフォルダ内に入っていない。 
という問題があるのかなと考えています。 

違います。ヘッダはコンパイル時に解釈されるソース・コードです。それが不足している時はコンパイル時にエラーがでます。
リンクまで進んでいる(エラー・コードがLNKで始まっているのでリンカがエラーを出してます)ということはコンパイルには通っています。

しかし、OpenCVはVisual Studio用には自動的に必要なライブラリをリンクしてくれます。
ということは、ビルドされていないOpenCVを使っているか、OpenCVのライブラリ・パスを指定しそこなっていると言うことです。

2. Visual Studioによる新規プロジェクト作成が参考になると思います。Visual Studioのバージョンがちょっと異なりますが、大差はないです。「2.4 ライブラリパス設定」の設定を確認下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/29 06:04 編集

    なんとかエラーは解消できました!
    しかし、エラーが頻繁に出ないように上記のサイトを勉強します。
    サイトを教えてくださり、ありがとうございます。

    キャンセル

  • 2018/11/22 16:26

    同じ現象が起きていて「Unicode (UTF-8 シグネチャ付き) - コードページ 65001」を選択して、期待通り警告が出なくなりました。
    ありがとうございます。

    キャンセル

  • 2018/12/04 14:42

    お役に立てて何よりです!

    ご教授頂いた方々、有難うございました。

    キャンセル

+1

error LNK2001: 外部シンボル ""class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z)" は未解決です。

http://harapeko-kid.hungry.jp/opencv3-1-install
上のページの通りにやったのであれば、リンクしたライブラリファイルが opencv_core310(d).lib と opencv_highgui310(d).lib の2つしか入れていないはずです。
imread, imwrite にはそれでは不足です。おそらく opencv_imgcodecs310(d).lib が必要です。
まだ足りなければ、lib フォルダに有る opencv_*.lib ファイルを全部入れてください(ただし Debug と Release を間違えないように注意)

なお、Visual Studio 2013 であれば、公式から配布されているプリビルド版が使えるので、わざわざ自分でビルドしなくても、
既に他の方が回答されているように opencv_world***.lib の一つだけで十分なはずです。

ちなみに老婆心ながら、C/C++ の基礎知識である、「リンクとは何か」も理解されていない(エラーメッセージの意味がわからない、ヘッダファイルとライブラリファイルの区別もついていない)ようですので、まずはそちらを先に勉強されることをおすすめします。でなければ、何度でも同じようなところでつまずくでしょう。
OpenCV は最初に学習されるライブラリとしては、少し複雑すぎると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/29 06:14 編集

    opencv_imgcodecs310(d).libを追加の依存ファイルに追加していませんでした。
    その後、うまくいきました!ありがとうございます!
    リンク、ライブラリファイルについて勉強し直します。
    デバッグで毎回躓いているので...

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • C++に関する質問
  • 「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」の警告を解消したいです。