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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

3回答

5832閲覧

同じ文字列が一致しない

kanego

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

1グッド

0クリップ

投稿2019/08/14 12:50

前提・実現したいこと

はじめまして。

まだ初心者ですが何かを作ってみたいと思い、しりとりをするプログラムを作成しています。

具体的には入力ファイルから単語を選び、ユーザーの入力に対してしりとりを行う仕様です。

現在は、特定の文字列でしりとりを終了するコードを作成しています。

質問はそのテストコードに関してです。

発生している問題

input_file内の文字「パナキ」とtest.rb内で定義した文字列「パナキ」が一致しません。

if文により、この2種類の文字列が一致するかどうかを確かめました。
どちらも同じ文字列なのだから、trueを返すかと思いました。
しかし、実際は予想と違い、falseが返されました。

以下の2点について、どなかたご教示ください。
・これはどういった違いから生じるのか?
・2つの文字列がtrueを返すにはどうすればいいか?

############################################
#test.rb
array = Array.new

i = 0 j = 0 file = File.open("input_file") file.each{|line| array[i] = line.strip i += 1 } file.close

file_string = array[0] # input_fileから読み込んだ文字列
string = "パナキ" # このファイルで定義した文字列

print "file_stringのクラス ",file_string.class,"\n"
print "stringのクラス ",string.class,"\n"

print "file_string ";p file_string
print "string ";p string

if file_string == string
puts "2つの文字列は一致します"
elsif
puts "2つの文字列は一致しません"
end
#########################################

input_file

イメージ説明

コマンドライン

イメージ説明

試したこと

・2つの文字列に対して,pコマンドを実行しました.
一方は「パナキ」と表示され、もう一方は「\u30D1\u30CA\u30AD」と表示されました。
この違いが原因であると思いましたが、解決には至りません。

・文字コードはinput_file、test.rbいずれも「utf-8」です。

補足情報(FW/ツールのバージョンなど)

入力ファイルです。

vanaya_maya👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

あなたと同じ現象が発生する環境を再現してみました。
イメージ説明

この環境は、以下のようになっています。
input_fileの文字コード:シフトJIS
test.rbの文字コード:utf-8
コマンドプロンプトの文字コード:シフトJIS

あなたの環境で、
type test.rb
と入力してください。
これは、test.rbの内容を画面に表示するコマンドです。
以下のような、文字化けした内容が表示されるはずです。
イメージ説明

正しい結果を得るためには、すべての文字コードを同じにする必要があります。
1.コマンドプロンプトをutf-8にします。
下記のURLを参考にしてください。
参考URL1
参考URL2

2.input_fileがutf-8かどうか再度確認してください。シフトJISのように思われます。
現在、編集中の文字コードが表示できるエディタで文字コードを確認してください。

投稿2019/08/15 00:45

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanego

2019/08/16 01:54

ご回答いただきありがとうございます! tatsu99さんのご指摘通りにしたところ,文字列の一致が確認できました! 原因としましては, ①コマンドプロンプトの文字コードがWindows-31Jであったこと. ②input_fileの文字列「パナキ」の文字コードがWindows-31Jであったこと. ②に関しては,質問投稿前に:set enc?コマンドでutf-8と表示されたので,input_file内の「パナキ」の文字コードもutf-8であると勘違いしていまいました. それが原因で嘘の事前情報を送ってしまい,申し訳ございません. 改めて,ミスの再現,URLを含めた詳細な解説,情報の整理がしやすい簡潔な説明をいただきありがとうございます!!!
guest

0

「\u30D1\u30CA\u30AD」

これは、utf-16の文字コードですね。
vimの設定が、utf-16になってませんか?

投稿2019/08/14 13:24

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanego

2019/08/16 01:56

pepperleafさん ご回答いただきありがとうございます. vim画面にて,「:set enc?」を試したところ,「utf-8」と表示されました.
guest

0

Ruby

1print "file_stringのエンコーディング ",file_string.encoding,"\n" 2print "stringのエンコーディング ",string.encoding,"\n"

を追加すると分かると思います。

WindowsのRubyは、Encoding.default_externalのデフォルトがWindows-31J(シフトJISのMS拡張)になっていますので、utf-8のファイルを読むときは、openでエンコーディングを指定します。

別解としては、Encoding.default_external = "utf-8"open前に実行しておきます。

投稿2019/08/14 13:22

編集2019/08/14 13:46
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/08/14 13:40

> WindowsのRubyは、デフォルトが Windows31J と書きましたが、Windows用Rubyは何種類かあるので、全部かどうか分かりません。 少なくともRubyInstallerはそうです。
kanego

2019/08/16 02:04

otnさん ご回答いただきありがとうございます. ご教示いただいたコマンドを実行したところ file_stringがWindows-31J,stringがutf-8と表示されました. この情報と他の方のアドバイスが決め手となり,解決へとつながりました. 本当にありがとうございます. ベストアンサーを差し上げられず,申し訳ございません..
otn

2019/08/16 02:20

> ・文字コードはinput_file、test.rbいずれも「utf-8」です。 これが、間違っていたと言う事ですかね。 文字エンコーディングがわかるエディタを使いましょう。もしくは使っているエディタを理解しましょう。 > :set enc?コマンドでutf-8と表示されたので, encoding はバッファのエンコーディングですね。ファイルのエンコーディングは fileencoding です。
kanego

2019/08/16 05:56

> これが間違っていたということですね その通りです。 利用エディタに対する理解不足でした。vimの文字コーディングが表示される方法を調べてみて、なさそうなら他のエディタに変えることも視野に入れようと思います。 > encording はバッファのエンコーディングですね。 ファイルのエンコーディングは fileencoding です。 バッファとファイルの区別がついていませんでした。自分で調べたときは、これらの区別が曖昧なまま理解していたので、両者の違いについて勉強します。 otnさん、重ね重ね感謝しますm(._.)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問