汉字转拼音

各个国家语言上差异较大,本世纪英语特别的流行,至少在程序员上编程就是属于外国的。是英文编写的。那么我们的汉字就是一个特例了。下面说说汉字是如何转拼音的。

jar包准备

这里写图片描述
点我下载pinyin4j.jar

如果你是maven那就方便了。

<!-- 汉字转拼音jar -->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.0</version>
        </dependency>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用

  • jar包准备好了,我们就开始使用吧,这个jar都分装好了,我们只需要简单的调用就行。

  • 第一步:定义汉字拼音的输出格式

HanyuPinyinOutputFormat hypy = new HanyuPinyinOutputFormat();
 
 
  • 1
  • 1
  • 上面定义的hypy这个类就是指定拼音的格式。作为中国人我们知道拼音就是字母拼接在一起的。还有就是声调,所以格式就是制定字母显示和声调的。

  • 通过看HanYuPinYinOutputForMat这个类的源码我们可以看到输出格式有三个属性,而且这三个属性的默认值都是设置好的

/**
   * Restore default variable values for this class
   * 
   * Default values are listed below:
   * 
   * <p>
   * HanyuPinyinVCharType := WITH_U_AND_COLON <br>
   * HanyuPinyinCaseType := LOWERCASE <br>
   * HanyuPinyinToneType := WITH_TONE_NUMBER <br>
   */
   public void restoreDefault() {
    vCharType = HanyuPinyinVCharType.WITH_U_AND_COLON;
    caseType = HanyuPinyinCaseType.LOWERCASE;
    toneType = HanyuPinyinToneType.WITH_TONE_NUMBER;
  }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 上面源码的意思就是,如果我们不设置,那么这三个属性默认就是上面的情况,那么这些格式都是对应拼音的那种格式呢,下面继续往下走。
LOWERCASE
Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE
WITH_TONE_NUMBER lu:3 lv3 lü3
WITHOUT_TONE lu: lv
WITH_TONE_MARK throw exception throw exception





























UPPERCASE
Combination WITH_U_AND_COLON WITH_V WITH_U_UNICODE
WITH_TONE_NUMBER LU:3 LV3 LÜ3
WITHOUT_TONE LU: LV
WITH_TONE_MARK throw exception throw exception

  • 看到上面两张表格没,就是hypy格式中三种属性的结合对应的汉语拼音的显示。在这里我还是解释一下吧。
 * @see HanyuPinyinVCharType
 * @see HanyuPinyinCaseType
 * @see HanyuPinyinToneType

hypy.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
hypy.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);  
hypy.setVCharType(HanyuPinyinVCharType.WITH_V);
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 首先setCaseType是指定我们输出的拼音的大小写,这个就不用多讲了。
  • setToneType是指定我们带声调的拼音的显示。这里有三种选择

    • HanyuPinyinToneType.WITH_TONE_NUMBER 通过数字标注声调 zhang1 zhang2 zhang3 zhang4 分别是一二三四声、 
      -HanyuPinyinToneType.WITHOUT_TONE:不带声调,就是没有声调 
      HanyuPinyinToneType.WITH_TONE_MARK:通过符号标注,和我们平时书写一样,像u 和 ü 就通过符号区别
  • setVCharType:WITH_U_AND_COLON + WITH_V + WITH_U_UNICODE 就是处理u ü 的。

输出

  • 在上面一步 我们已经将格式处理好了,这里我们开始处理输出
PinyinHelper.toHanyuPinyinStringArray("张新华".charAt(2), hypy)[0]
 
 
  • 1
  • 1

就这样拼音就出来了,这个就返回出来我们汉字的拼音了。对于使用者到这里就结束了。但是出于好奇我们继续往下看看。



PinyinHelper这个单列中toHanyuPinyinStringArray

static public String[] toHanyuPinyinStringArray(char ch, HanyuPinyinOutputFormat outputFormat)
      throws BadHanyuPinyinOutputFormatCombination {
    return getFormattedHanyuPinyinStringArray(ch, outputFormat);
  }
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

意思就是获取格式化后的ch的拼音

而在getFormtedHanyuPinyinStringArray方法里首先是获取未格式化的拼音,然后在对拼音格式化。

String[] pinyinStrArray = getUnformattedHanyuPinyinStringArray(ch);
 
 
  • 1
  • 1

如何获取未格式化的拼音是重点我们就侧重这部分

 private static String[] getUnformattedHanyuPinyinStringArray(char ch) {
    return ChineseToPinyinResource.getInstance().getHanyuPinyinStringArray(ch);
  }
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 在上面我们能够看到ChineseToPinyinResource类,在这个类中我们可以找到他的初始化数据,这里我们可以理解为web项目中的数据库
/**
   * Initialize a hash-table contains <Unicode, HanyuPinyin> pairs
   */
  private void initializeResource() {
    try {
      final String resourceName = "/pinyindb/unicode_to_hanyu_pinyin.txt";

      setUnicodeToHanyuPinyinTable(new Properties());
      getUnicodeToHanyuPinyinTable().load(ResourceHelper.getResourceInputStream(resourceName));

    } catch (FileNotFoundException ex) {
      ex.printStackTrace();
    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 上面的代码指出了这个所谓的额数据库就是unicode_to_hanyu_pinyin.txt

这里写图片描述

这里面究竟是什么呢,打开你会发现其实就是拼音和Unicode的对应关系。因为在我们获取拼音的时候是首先获取他的Unicode码的getHanyuPinyinRecordFromChar(ch);,然后通过Unicode码去unicode_to_hanyu_pinyin.txt找对应关系的,至于其他文件是处理其他的语种的,时间能力有限,暂不深究!

获取未格式化的拼音之后就是处理格式了,

PinyinFormatter.formatHanyuPinyin
 
 
  • 1
  • 1

到这里就是根据上面的三个值进行格式化处理了,这个就是格式的问题,本文不深究。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 JavaScript 中,可以使用第三方库来实现汉字拼音的功能。其中比较流行的库是 pinyin.js。 以下是使用 pinyin.js 库进行汉字拼音的详细教程: 1.引入 pinyin.js 库 在 HTML 文件中引入 pinyin.js 库。 ```html <script src="https://cdn.bootcdn.net/ajax/libs/pinyinjs/0.3.3/pinyin.core.js"></script> ``` 2.编写 JavaScript 代码 首先,需要获取要换成拼音汉字字符串。 ```javascript let chineseStr = "你好世界"; ``` 然后,使用 pinyin.js 库的 `getFullChars()` 方法将汉字换成全拼。 ```javascript let pinyinStr = pinyin.getFullChars(chineseStr); ``` 如果只需要获取汉字的首字母拼音,可以使用 `getFirstChars()` 方法。 ```javascript let pinyinStr = pinyin.getFirstChars(chineseStr); ``` 如果需要获取汉字的简拼,可以使用 `getShortChars()` 方法。 ```javascript let pinyinStr = pinyin.getShortChars(chineseStr); ``` 最后,将换后的拼音字符串输出。 ```javascript console.log(pinyinStr); // 输出:nǐ hǎo shì jiè ``` 完整的 JavaScript 代码如下: ```javascript let chineseStr = "你好世界"; let pinyinStr = pinyin.getFullChars(chineseStr); console.log(pinyinStr); // 输出:nǐ hǎo shì jiè ``` 需要注意的是,pinyin.js 库只能将汉字换成拼音,对于其他语种的字符将不会进行换。同时,由于拼音存在多音字的情况,换结果可能存在歧义,需要根据实际情况进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值