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

お世話になります。
.NET C#にて開発をしております初心者です。

C#からテキストデータにデータの書き出しを行っており、
文字コードをUTF-8からSHIFT-JISへ変換したいのですが、
ネット等で確認し、記述したのですが、データの中には
半角カナ文字もあり、どうも変換がうまくいきません。

どなたかサンプルコードまたは、参考になるサイトなどを
お教え頂きたく宜しくお願い致します。

A 回答 (6件)

#4 です



どうもここでは半角カナは強制的に全角に変換されちゃうようなので、

> string orgstr = "これは文字コードの変換テストだよ。\n";

の「コード」と「テスト」は半角カナに置き換えてください。
    • good
    • 1
この回答へのお礼

いつも有難うございます。
おかげさまで、解決致しました。
また宜しくお願い致します。

お礼日時:2010/11/13 11:33

NO3さんによると



ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています

そうですか 認識不足で失礼しました NO1
    • good
    • 0

どういうコードで、どのようにうまくいかないのかわかりませんが……


半角カナがあってもとくに問題があるようには思いませんが。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ShiftJIS
{
class Program
{
static void Main(string[] args)
{
// 元のデータ(Unicode)
Encoding orgenc = Encoding.Unicode;
string orgstr = "これは文字コードの変換テストだよ。\n";
byte[] orgbyte = orgenc.GetBytes(orgstr);

// UTF-8に変換
Encoding utf8enc = Encoding.UTF8;
byte[] utf8byte = Encoding.Convert(orgenc, utf8enc, orgbyte);
string utf8str = utf8enc.GetString(utf8byte);
File.WriteAllText("test_utf8.txt", utf8str, Encoding.UTF8);
File.WriteAllBytes("test_utf8.bin", utf8byte);

// Shift-JISに変換
Encoding sjisenc = Encoding.GetEncoding("Shift_JIS");
utf8byte = utf8enc.GetBytes(utf8str);
byte[] sjisbyte = Encoding.Convert(utf8enc, sjisenc, utf8byte);
string sjisstr = sjisenc.GetString(sjisbyte);
File.WriteAllText("test_sjis.txt", sjisstr, Encoding.GetEncoding("Shift_JIS"));
File.WriteAllBytes("test_sjis.bin", sjisbyte);
}
}
}
    • good
    • 0

「どうも変換がうまくいきません」ではうまくいかないことしかわかりません. 質問しているということだけで「うまくいっていない」ことは明らかなので, これでは全く意味をなしません. どう「うまくいかない」のか, もっと詳しく説明してください. たとえば「こういう入力を与えたときにこんな結果を期待したんだけど, 実際にはこのような結果になった」という例があれば, 判断のしようもあるかもしれません. 現状でいえるのは


Unicode から shift_jis (でも EUC-JP でも ISO-2022-JP でも同じなんだけど) への変換は結局「表を見る」しかないわけで, その表がちゃんとできていれば「半角カナ」だってちゃんと変換できるはず
くらい.

ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています>#1.
    • good
    • 0

ICONVなど、いかがでしょうか。


サンプルは、EUC->UTF8ですが
UTF8->SJISも可能なはずです。
ただし、自分でDLL等をインストールする必要があります。

参考URL:http://code.nanigac.com/source/view/20
    • good
    • 0
この回答へのお礼

有難うございました。
参考になりました。

お礼日時:2010/11/13 11:31

変換する以前につぎのことを


認識する必要があります

(1)SHIFT-JISからUTF-8へ変換は100%OK
(2)UTF-8からSHIFT-JISへ変換は対応しない部分がある
  つまり(1)の逆はかならずしも真ではない
(3)半角カナ文字と SHIFT-JISの1バイトでない文字とは
  かちあう
  つまり  SHIFT-JISでは半角カナ文字はない(と記憶しているが)
    • good
    • 0
この回答へのお礼

早期にご回答頂き有難うございました。

お礼日時:2010/11/11 07:32

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