アプリ版:「スタンプのみでお礼する」機能のリリースについて

特定の文字が中国語かどうかを判定したいと思っています。
その際、日本語として存在する漢字については日本語として判定したいです。

そのために色々調べて、下記サイトを参考に試してみました。
https://qiita.com/Saqoosha/items/927e9d6e77922ad …

例えば、「国」の漢字の場合は、
日本語:国
簡体字:国
繁体字:國
ですが、上記のサイトのやり方だと簡体字として判定されてしまいます。

日本語として存在する漢字は日本語、中国語にしかない漢字を中国語として
判定したいのです。

そのようなやり方をご存知の方がいらっしゃいましたら、
教えていただけないでしょうか。

以上、よろしくお願い致します。

質問者からの補足コメント

  • 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

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/11/05 11:15
  • Catch ex As Exception
       If IsJapanese(item) Then
        PYstr = PYstr + item.ToString
       Else
        PYstr = "ERROR"
        Exit For
       End If
      End Try
     Next

      補足日時:2021/11/05 11:16
  • End Function

      補足日時:2021/11/05 11:17
  • 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

      補足日時:2021/11/05 11:18
  • Ogre7077様

    ロジックが長かったため、補足に跨って載せました。

    有益な情報ありがとうございました!

      補足日時:2021/11/05 11:20
  • ##実行結果##
    変換後 = Aあ91.NI好
    変換後 = ERROR

      補足日時:2021/11/05 11:29
  • ※ピンインの変換には「Simplified Chinese Pin-Yin Conversion Library」を使っており、以下のインポートをしています。
    Imports Microsoft.International.Converters.PinYinConverter

      補足日時:2021/11/05 11:34

A 回答 (2件)

対象の文字が Unicode ならば、


文字コードを変換して UTF-8/16 → CP932 にできれば
日本語として存在する文字と判断してよいかと思います。

参考)
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
この回答への補足あり
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

教えていただいたサイトを参考に以下のようなロジックを作ったところ、思ったような動きをしてくれました。

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

お礼日時:2021/11/05 11:10

そのサイトのやり方だと「対応する簡体字があれば繁体字」「対応する繁体字が存在すれば簡体字」と判定するはずだから, 当然そうなっちゃうね.



とはいっても本質的にはその方法しかないわけで. 端的にいえば「日本語として存在する漢字」の一覧を持って, その中にあるかどうかを判定することになる. 「日本語として存在する」かどうかは極論「自分の目で決める」んだけど, JIS の範囲内であれば文字コードの変換で何とかなる... かなぁ.

自力で頑張るなら, サロゲートペアや異体字セレクタまで頭を使わないといけないかも.

言語タグがあったらどうするんだろう.
    • good
    • 0
この回答へのお礼

そもそものやりたいことを申しますと、人名に関して、日本語にはない漢字についてはピンインに変換する、日本語の場合はそのまま、それ以外の場合(例えば ă など)についてはエラーと判断するということです。
故に文字列の中(人名)に言語タグなど特殊なものは含まれない前提です。
良く考えると簡体字や繁体字に関わらずそれ以外の漢字も含めて、日本語にはない漢字の場合はピンインにしたいので、元々参考にしていたサイトの条件は無くして、補足に書かせてもらったようなロジックでいけそうだなと思っています。
アドバイスありがとうございました!

お礼日時:2021/11/05 11:28

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