No.6ベストアンサー
- 回答日時:
昼休みにsakuraエディタのソース見てみました♪
JISで検索すると
CEditView.h:757:void Command_CODECNV_SJIS2JIS( void );/* SJIS→JISコード変換 */
とか
CEditView.cpp:5619:case F_CODECNV_SJIS2JIS:pCMemory->SJIStoJIS();break;/* SJIS→JISコード変換 */
いうのがすぐ見つかるじゃないですか。
> 思うソースがみつかりませんでした^^;
> ヘルプファイルのようなものはみつかったのですが・・・
もうちょっとソースの読み方を身に付けたほうが良いかも。
んで、
void CMemory::SJIStoJIS( void )
{
/* SJIS→JIS */
StrSJIStoJIS( &cMem, (unsigned char *)m_pData, m_nDataLen );
↓
int CMemory::StrSJIStoJIS( CMemory* pcmemDes, unsigned char* pszSrc, int nSrcLen )
{
// SJIS→JIS変換
nWorkLen = MemSJIStoJIS( pszWork, nWorkLen );
↓
/* SJIS→JIS変換 */
long CMemory::MemSJIStoJIS( unsigned char* pszSrc, long nSrcLen )
{
//Oct. 3, 2002 genta IBM拡張文字対応
sCode = _mbcjmstojis_ex( pszSrc + i );
で、
/*!
@brief 拡張版 SJIS→JIS変換
SJISコードをJISに変換する.その際,JISに対応領域のないIBM拡張文字を
NEC選定IBM拡張文字に変換する.
Shift_JIS fa40~fc4b の範囲の文字は 8754~879a または ed40~eefc に
散在する文字に変換された後に,JISに変換されます.
@param pszSrc [in] 変換する文字列へのポインタ (Shift JIS)
@author すい
@date 2002.10.03 1文字のみ扱い,変換まで行うように変更 genta
*/
unsigned short CMemory::_mbcjmstojis_ex( unsigned char* pszSrc )
{
が実体ですね。
if(
( *pszSrc == 0x0fa ) ||
( *pszSrc == 0x0fb ) ||
( ( *pszSrc == 0x0fc ) && ( *(pszSrc+1) <= 0x04b ) )
) {/* fa40~fc4b の文字である。 */
/* 文字コード変換処理 */
これで切り分けて、ライブラリ関数の_mbcjmstojis で
変換できる部分はそれに任せて
そうでない文字は細かくチェックして
変換しているみたいですね。
んじゃあ頑張って読み取ってください♪
回答ありがとうございます。
わざわざ探していただきましてありがとうございました。
おかげさまで、何とか実装できそうです。
ありがとうございました。
No.5
- 回答日時:
>作者さんのHPでソースを探してみてダウンロードしてみたのですが、
>思うソースがみつかりませんでした^^;
>ヘルプファイルのようなものはみつかったのですが・・・
ここで、
ssrc_2007-07-08.tar.bz2
を持って行って、7zipで2回解凍すれば
参考URL:http://sourceforge.net/project/showfiles.php?gro …
No.4
- 回答日時:
> 半角かなのJISへの変換はできるようになりましたが、SJISへ戻すのがなぜかできません^^;
>半角カナをSJIS→JISはできて、
「はしご高」のJIS→SJISはなんとなくできるようになりましたが、
どちらともなぜか逆ができずにいます^^;
とりあえず半角カナだけ言うと、
SO/SIを使って表すやりかたなら、SOが出ているかどうかを
覚えておかないといけません。
覚えていたら、8bit目を立てるだけだからそう難しくはないのでは?
はしご高は、コードの値が大きいので
ふつうに計算式にかけるとオーバーフローが
発生したように記憶しています。
それを調整するか、あるいはコードの変換を
テーブルをひく形でやってしまえばいいと思います。
最近作られているコード変換ユーティリティは
こっちのテーブルをひく形式の方が主流のような気がします。
お礼が遅くなりました。
回答ありがとうございました。
やはり、計算では限界があるのですね。
サンプルなどを参考に
何とか変換機能を実装できそうです。
No.2
- 回答日時:
サクラエディタで双方向に変換できるとか、
Outlookで文字化けしないとかはそれぞれの
アプリが入力データに対して「緩めに規則を適用」
しているからです。
厳しく規則を適用すれば、丸数字はJIS(iso-2022-jp)や
ShiftJISにはありませんし、
はしご高もそうですから、
illegalなデータとして弾かれます。
ただ、JIS←→SJISのコード変換は計算式で
求められるものなので、
無理やりその計算にかけてしまってその結果を
使っているだけのことです。
今現在どのような手段で変換を行っているのか
わかりませんが、
ShiftJISの代わりに、cp932とかWindows-31J
というキャラクタセットを指定したり、
JISの代わりにコードページ 51932を使ったりすれば
*変換できることも*あります。
残念ながらこちらには cp932とかWindows-31J
というのに該当するキャラクタセットはありません。
ISO-2022-JP-MSというのが提案されていたりしますが
一般的ではありません。
Microsoftコードページ932 - Wikipedia
http://ja.wikipedia.org/wiki/Windows-31J
http://www2d.biglobe.ne.jp/~msyk/software/libico …
ISO-2022-JP-MS - PukiWiki
http://legacy-encoding.sourceforge.jp/wiki/index …
回答ありがとうございます。
不明確だった部分が理解できました。
使いやすさを求めると規制を緩めた形でする必要があるのですね。
コード変換の計算式があるのですね・・・
色々探してみて、半角カナをSJIS→JISはできて、
「はしご高」のJIS→SJISはなんとなくできるようになりましたが、
どちらともなぜか逆ができずにいます^^;
No.1
- 回答日時:
> 半角カナはJISにない
そんなことはありません。
> 方法や参考資料を教えていただければと思います。
専用のエスケープシーケンスまたはSO/SIを使用します。
参考URL:http://mikeneko.creator.club.ne.jp/~lab/kcode/ha …
回答ありがとうございます。
エスケープシーケンスが別に用意されているのですね。
色々と試してみて、半角かなのJISへの変換はできるようになりましたが、SJISへ戻すのがなぜかできません^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- C言語・C++・C# S-JIS → JIS コード変換するには 3 2023/02/09 23:55
- Mac OS Macの変換ですが、一発で半角英字に変換する方法は無いですか? 3 2022/04/10 22:19
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- マウス・キーボード 何故、ローマ字や英語を全角で打つ? 5 2022/05/15 09:36
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
VB6からVB2010への変換について
-
【EXCEL】カナ、ひらがなを英字...
-
Mac 乗数の入力方法
-
シフトJISのCSVファイルをUFT-8...
-
ハフ変換の原理をわかりやすく...
-
bitmapクラスをiconクラスに変...
-
数値英単語変換プログラム
-
Excel-VBAのmsgBox()の不思議
-
3のつく数字と3の倍数のみを表...
-
自作ソフトキーボードによる文...
-
分を時間に変換するプログラム
-
VB 6 を VS 2012に変換するには?
-
bmp→jpgに、jpg→bmpに
-
vb.netの型変換について
-
LPCWSTRへの型変換について
-
VC++2005で、CString型に16進...
-
MATLAB/simulinkでのD/A変換の仕方
-
C/C++→JAVAに変換するツール
-
SJIS⇔UTF-8の文字コード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Excel-VBAのmsgBox()の不思議
-
Mac 乗数の入力方法
-
家電製品の電力周波数を変える機械
-
3のつく数字と3の倍数のみを表...
-
bmp→jpgに、jpg→bmpに
-
10進数をBCDに変換する方法
-
【EXCEL】カナ、ひらがなを英字...
-
StrConvの使い方について教えて...
-
分を時間に変換するプログラム
-
画像ファイル変換(Tiff→PDF)
-
マンセル⇔XYZ,RGB変換式或いは...
-
C/C++→JAVAに変換するツール
-
VB6からVB2010への変換について
-
c++でmatからvectorへの変換の...
-
DOSコマンドでの文字コード変換...
-
VB.NETをJavaに変換するツール...
-
SJIS⇔UTF-8の文字コード...
-
なぜ通信には16進数文字列が使...
-
C#でのpngからbmpへの変換について
おすすめ情報