
特定の文字が中国語かどうかを判定したいと思っています。
その際、日本語として存在する漢字については日本語として判定したいです。
そのために色々調べて、下記サイトを参考に試してみました。
https://qiita.com/Saqoosha/items/927e9d6e77922ad …
例えば、「国」の漢字の場合は、
日本語:国
簡体字:国
繁体字:國
ですが、上記のサイトのやり方だと簡体字として判定されてしまいます。
日本語として存在する漢字は日本語、中国語にしかない漢字を中国語として
判定したいのです。
そのようなやり方をご存知の方がいらっしゃいましたら、
教えていただけないでしょうか。
以上、よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
対象の文字が Unicode ならば、
文字コードを変換して UTF-8/16 → CP932 にできれば
日本語として存在する文字と判断してよいかと思います。
参考)
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
アドバイスありがとうございます。
教えていただいたサイトを参考に以下のようなロジックを作ったところ、思ったような動きをしてくれました。
Sub Main()
Dim str As String = ConvertToPinYin("Aあ91.你好")
Console.WriteLine("変換後 = {0}", str)
Dim str As String = ConvertToPinYin("aă")
Console.WriteLine("変換後 = {0}", str)
End Sub
No.2
- 回答日時:
そのサイトのやり方だと「対応する簡体字があれば繁体字」「対応する繁体字が存在すれば簡体字」と判定するはずだから, 当然そうなっちゃうね.
とはいっても本質的にはその方法しかないわけで. 端的にいえば「日本語として存在する漢字」の一覧を持って, その中にあるかどうかを判定することになる. 「日本語として存在する」かどうかは極論「自分の目で決める」んだけど, JIS の範囲内であれば文字コードの変換で何とかなる... かなぁ.
自力で頑張るなら, サロゲートペアや異体字セレクタまで頭を使わないといけないかも.
言語タグがあったらどうするんだろう.
そもそものやりたいことを申しますと、人名に関して、日本語にはない漢字についてはピンインに変換する、日本語の場合はそのまま、それ以外の場合(例えば ă など)についてはエラーと判断するということです。
故に文字列の中(人名)に言語タグなど特殊なものは含まれない前提です。
良く考えると簡体字や繁体字に関わらずそれ以外の漢字も含めて、日本語にはない漢字の場合はピンインにしたいので、元々参考にしていたサイトの条件は無くして、補足に書かせてもらったようなロジックでいけそうだなと思っています。
アドバイスありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「一回ずつ」でしょうか「一回...
-
「〜は終わっていますか?」を...
-
「毎」の読み方
-
「オールオッケー」という言葉...
-
What is this/that?の答え方
-
同じを表す「〃」や「々」は英...
-
「そうゆう」とか「どうゆう」...
-
「ピンポイント」という日本語...
-
参考文献の中に英語が!!
-
日本語でFuck Youに相当する言...
-
「全頁」何と読みますか(ふり...
-
何名様ですか?2名です・・・...
-
私なんてまだまだですよ〜みた...
-
Not my business. 日本語では、...
-
兄弟は英語で「brother」ですが...
-
人生をかける、の漢字はどれ?
-
「上から順に希望順です」とい...
-
日本語の疑問文に疑問符をつけ...
-
国語は苦手で、英語は得意とい...
-
老婆心って?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「〜は終わっていますか?」を...
-
「一回ずつ」でしょうか「一回...
-
「毎」の読み方
-
「ピンポイント」という日本語...
-
「オールオッケー」という言葉...
-
同じを表す「〃」や「々」は英...
-
TEXT( ,"ddd")で英語曜日が表示...
-
私なんてまだまだですよ〜みた...
-
「上から順に希望順です」とい...
-
見たことを「聞いた」 書くこと...
-
英語のビジネスメールで
-
ぱ(PA)行で始まる日本人の名字...
-
またご一緒できたら嬉しいです...
-
少なくとも1200字程度って1200...
-
「全頁」何と読みますか(ふり...
-
人生をかける、の漢字はどれ?
-
会計用語の「AP or/and AR」...
-
目処(めど)と目途(もくと)
-
役職名の表記で「営業統括部」...
-
何名様ですか?2名です・・・...
おすすめ情報
Public Function ConvertToPinYin(ByVal str As String) As String
If String.IsNullOrEmpty(str) Then
Return String.Empty
End If
Dim PYstr As String = ""
For Each item As Char In str.ToCharArray
Try
Dim cc As New ChineseChar(item)
If IsJapanese(item) Then
PYstr = PYstr + item.ToString
Else
PYstr = PYstr + cc.Pinyins(0).Substring(0, cc.Pinyins(0).Length - 1)
End If
Catch ex As Exception
If IsJapanese(item) Then
PYstr = PYstr + item.ToString
Else
PYstr = "ERROR"
Exit For
End If
End Try
Next
End Function
Private Function IsJapanese(ByVal str As String) As Boolean
Try
Dim shiftjis As Encoding = Encoding.GetEncoding("shift-jis", New EncoderExceptionFallback(), New DecoderExceptionFallback())
Dim bytes() As Byte = shiftjis.GetBytes(str)
Return True
Catch ex As Exception
Return False
End Try
End Function
Ogre7077様
ロジックが長かったため、補足に跨って載せました。
有益な情報ありがとうございました!
##実行結果##
変換後 = Aあ91.NI好
変換後 = ERROR
※ピンインの変換には「Simplified Chinese Pin-Yin Conversion Library」を使っており、以下のインポートをしています。
Imports Microsoft.International.Converters.PinYinConverter